2009-07-18 8 views
10

Considerate questo codice:Perché questo array Java è considerato bidimensionale?

class arraytest { 

    public static void main(String args[]) { 

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

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

    } 

} 

La linea

b = a; 

è fermato dal compilatore dicendo:

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

Perché b considerato bidimensionale? Mi rendo conto che la dichiarazione di "scorciatoia"

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

è la colpa, ma perché ci fa la matrice bidimensionale, quando solo un set di staffe sono stati scritti? Trovo questa sintassi poco chiara e offuscante.

risposta

19

Prendete questo esempio:

int a, b; 

Poi sia a che b sono interi, giusto? Quindi prendi questo:

int[] a, b; 

Sia a che b sono int arrays. Quindi, con l'aggiunta di un altro set di staffe:

int[] a, b[]; 

si avete aggiunto un altro set di staffe a b.

Uno di questi sarebbe andato bene:

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

o come dici tu, semplicemente mettendo su linee separate avrebbe funzionato troppo (e molto più facile da leggere).

+0

+1, Con int a [] = null, b [] = null; compilerei bene – akarnokd

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


.... è pari a:

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

quello che dovete fare:

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

In aggiunta alle altre risposte, Java non ha multi- array dimensionali. Java ha matrici di qualsiasi tipo. Questo "qualsiasi tipo" può essere di per sé un array. Gli array multidimensionali sono nettamente differenti, anche se sottilmente.

2

Se si prende la dichiarazione a, questo è quello che hai:

int[] b[] = null; 

che è, purtroppo, un'alternativa legale per

int[][] b = null; 
1

ero portato a credere che la sintassi di permettendo che [] dopo la b fosse lì solo per il pubblico di lingue C che si sentirebbe più a suo agio con esso.Purtroppo, si ha l'effetto collaterale di consentire dichiarazioni confuse come

int[] b[]; 

che finisce uguale

int[][] b; 
Problemi correlati