2012-05-22 3 views
6

配列に関するJavaの動作を理解できません。 1つのケースで配列を定義することは禁じられていますが、別のケースでは同じ定義を使用できます。中括弧を使用してJavaで多次元配列を定義する方法は?

チュートリアルからの例:

String[][] names = { 
     {"Mr. ", "Mrs. ", "Ms. "}, 
     {"Smith", "Jones"} 
    }; 
System.out.println(names[0][0] + names[1][0]); // the output is "Mr. Smith"; 

私の例:

public class User { 
    private static String[][] users; 
    private static int UC = 0; 

    public void addUser (String email, String name, String pass) { 
     int i = 0; 

     // Here, when I define an array this way, it has no errors in NetBeans 
     String[][] u = { {email, name, pass}, {"[email protected]", "jack sparrow", "12345"} }; 

     // But when I try to define like this, using static variable users declared above, NetBeans throws errors 
     if (users == null) { 
     users = { { email, name, pass }, {"one", "two", "three"} }; // NetBeans even doesn't recognize arguments 'email', 'name', 'pass' here. Why? 

     // only this way works 
     users = new String[3][3]; 
     users[i][i] = email; 
     users[i][i+1] = name; 
     users[i][i+2] = pass; 
     UC = UC + 1; 
     } 
    } 

のNetBeansによってスローされたミスは、以下のとおりです。式の

違法スタート、

」 ; "予想される,

ステートメントです。

そしてまた、それは、引数emailusers配列の定義でnamepassを認識しません。しかし、u配列を定義すると、それらを認識します。

これら2つの定義の違いは何ですか?なぜ1つの作品が同じように定義されて別のものは動作しません?

答えて

11

あなたは、配列の集計前にnew String[][]を追加する必要があります。第二にのみ割り当てている間

users = new String[][] { { email, name, pass }, {"one", "two", "three"} }; 
+0

しかし、私は持っていますこれはすでに完了しています。 "public class User {"は "private static String [] [] users"の行です。 – Green

+2

@Green 'new String [] []'部分は、初期化と宣言を組み合わせたときに暗黙指定されています。フィールドまたは変数を1つの場所に宣言し、別の場所で初期化する場合は、作成するオブジェクトの型を配列集約の前に明示的に指定する必要があります。 – dasblinkenlight

2

最初のケースでは、初期化ステートメントです。そのような種類の配列の作成は、新しい配列を定義する場合にのみサポートされます。

5

あなたはこの構文を使用することができます。

String[][] u = {{email, name, pass}, {"[email protected]", "jack sparrow", "12345"}}; 

のみ初めてのマトリックスを宣言しているとき。 String[][]変数に値を代入すると、他の場所に宣言したの後に値が割り当てられないため、users = ...が失敗します。既に宣言String[][](またはそのことについては、他のタイプのマトリックス)に値を割り当てるために、あなたはnewを使用する必要があり、再割り当て行列について

users = new String[][] { { email, name, pass }, {"one", "two", "three"} }; 
2

を使用します。

users = new String[][] {{email, name, pass }, {"one", "two", "three"}}; 
関連する問題