Non capisco il comportamento di Java sugli array. Vieta di definire un array in un caso ma consente la stessa definizione in un altro.Come definire un array multidimensionale in Java usando le parentesi graffe?
L'esempio da tutorial:
String[][] names = {
{"Mr. ", "Mrs. ", "Ms. "},
{"Smith", "Jones"}
};
System.out.println(names[0][0] + names[1][0]); // the output is "Mr. Smith";
Il mio esempio:
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;
}
}
Gli errori lanciate dai NetBeans sono:
inizio illegale di espressione,
" ;" atteso,
non una dichiarazione.
E inoltre non riconosce gli argomenti email
, name
, pass
nella definizione dell'array users
. Ma li riconosce quando definisco l'array u
.
Qual è la differenza tra queste due definizioni? Perché uno funziona, ma l'altro definito allo stesso modo no?
Ma ho fatto questo già. Subito sotto la riga di "public class User {" è la riga "private static String [] [] users" – Green
@Green La parte 'new String [] []' è implicita quando si combinano l'inizializzazione e la dichiarazione; quando si dichiara un campo o una variabile in un posto, ma si inizializza in un posto diverso, è necessario fornire esplicitamente il tipo dell'oggetto che si sta creando prima dell'aggregazione dell'array. – dasblinkenlight