No entiendo el comportamiento de Java sobre las matrices. Se prohíbe definir una matriz en un caso, pero permite la misma definición en otro.¿Cómo se define una matriz multidimensional en Java con llaves?
El ejemplo del tutorial:
String[][] names = {
{"Mr. ", "Mrs. ", "Ms. "},
{"Smith", "Jones"}
};
System.out.println(names[0][0] + names[1][0]); // the output is "Mr. Smith";
Mi ejemplo:
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;
}
}
Los errores arrojados por NetBeans son:
inicio ilegal de expresión,
" ; " esperado,
no es una declaración.
Y también que no reconoce argumentos email
, name
, pass
en la definición de la matriz users
. Pero los reconoce cuando defino u
matriz.
¿Cuál es la diferencia entre estas dos definiciones? ¿Por qué funciona pero el otro definido de la misma manera no?
Pero tengo hecho esto ya Justo debajo de la línea de "Usuario de clase pública {" está la línea "private static String [] [] users" – Green
@Green La 'nueva cadena String [] []' está implícita cuando se combinan la inicialización y la declaración; cuando declara un campo o una variable en un lugar, pero lo inicializa en un lugar diferente, debe proporcionar explícitamente el tipo del objeto que está creando antes del agregado de la matriz. – dasblinkenlight