2012-05-22 5 views
6

Ich verstehe das Verhalten von Java über Arrays nicht. Es verbietet, ein Array in einem Fall zu definieren, erlaubt aber die gleiche Definition in einem anderen.Wie definiere ich ein mehrdimensionales Array in Java mit geschweiften Klammern?

Das Beispiel von Tutorial:

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

Mein Beispiel:

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; 
     } 
    } 

Die von NetBeans geworfen Fehler sind:

illegal Beginn des Ausdrucks,

" " erwartet,

keine Aussage.

Und es ist auch nicht erkennen Argumente email, name, pass in der Definition des users Array. Aber erkennt sie, wenn ich u Array definieren.

Was ist der Unterschied zwischen diesen beiden Definitionen? Warum der eine funktioniert, aber der andere auf die gleiche Weise nicht?

Antwort

11

Sie benötigen new String[][] vor dem Array Aggregat hinzuzufügen:

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

Aber ich habe das schon gemacht. Direkt unterhalb der Zeile "public class User {" steht die Zeile "private static String [] [] users" – Green

+2

@Green Der 'new String [] []' -Teil wird bei der Kombination von Initialisierung und Deklaration impliziert. Wenn Sie ein Feld oder eine Variable an einer Stelle deklarieren, aber an einer anderen Stelle initialisieren, müssen Sie explizit den Typ des Objekts angeben, das Sie vor dem Aggregieren des Arrays erstellen. – dasblinkenlight

2

Der erste Fall ist eine Initialisierung Anweisung, während die zweite nur eine Zuordnung. Diese Art des Füllens von Arrays wird nur unterstützt, wenn ein neues Array definiert wird.

5

Sie können diese Syntax verwenden:

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

Nur, wenn Sie die Matrix zum ersten Mal sind deklarieren. Es funktioniert nicht zum Zuweisen von Werten zu einer String[][] Variablen nach Sie haben es an anderer Stelle deklariert, deshalb users = ... schlägt fehl. Für Werte einer bereits erklärt String[][] (oder einer Matrix aus einer anderen Art für diese Angelegenheit) zuweisen, verwenden

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

für die Neuzuweisung der Matrix Sie new verwenden müssen:

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