2009-07-18 18 views
10

consideran este código:¿Por qué esta matriz de Java se considera bidimensional?

class arraytest { 

    public static void main(String args[]) { 

     int[] a = null , b[] = null; 

     b = a; 
     System.out.println(b); 

    } 

} 

La línea

b = a; 

se encuentra en posición por el compilador diciendo:

Incompatible types, found int[], required int [][] 

¿Por qué se consideran dos dimensiones b? Soy consciente de la declaración de "acceso directo"

int[] a = null , b[] = null;

tiene la culpa, pero ¿por qué tiene la matriz de dos dimensiones cuando sólo un conjunto de soportes de haber sido escrito? Encuentro esta sintaxis poco clara y ofuscante.

Respuesta

19

Tome este ejemplo:

int a, b; 

Entonces ambos a y b son enteros, ¿verdad? Así que ahora tome esto:

int[] a, b; 

Tanto la a como la b son matrices en int. Así que mediante la adición de otro conjunto de soportes:

int[] a, b[]; 

que tiene añade otro conjunto de soportes a b.

Cualquiera de estos estaría bien:

int[] a = null , b = null; 
int a[] = null , b[] = null; 

o como usted dice, simplemente poniéndolos en líneas separadas funcionaría también (y mucho más fácil de leer).

+0

+1, Con int a [] = null, b [] = null; compilaría muy bien – akarnokd

5
int[] a = null , b[] =null; 


.... es igual a:

int[] a = null; 
int[][]b = null; 

que tiene que hacer:

int[] a = null , b =null; 
3

Además de las otras respuestas, Java No tiene múltiples matrices dimensionales. Java tiene matrices de cualquier tipo. Este "cualquier tipo" puede ser una matriz. Las matrices multidimensionales son claramente diferentes, aunque sutilmente.

2

Si usted saca la declaración a, esto es lo que tienes:

int[] b[] = null; 

que es, por desgracia, una alternativa legal a

int[][] b = null; 
1

me llevan a creer que la sintaxis de permitiendo que [] después de la b estuviese allí únicamente para la multitud de C-lenguaje que se sentiría más a gusto con ella.Desafortunadamente, tiene el efecto secundario de que permiten declaraciones confusas como

int[] b[]; 

que termina el mismo que

int[][] b; 
Cuestiones relacionadas