2013-09-02 18 views
20

Stavo leggendo un libro su Java e ho trovato un esempio in cui un array di tipo double è stato inizializzato in un modo che non avevo mai visto prima. Che tipo di inizializzazione è e dove altro può essere utilizzato?Inizializzazione di array doppio in Java

double m[][]={ 
    {0*0,1*0,2*0,3*0}, 
    {0*1,1*1,2*1,3*1}, 
    {0*2,1*2,2*2,3*2}, 
    {0*3,1*3,2*3,3*3} 
}; 
+1

penso '.' nella prima istruzione dovrebbe essere a ',' – nachokk

+0

Il tuo codice non verrà compilato come tale. Il punto dovrebbe essere una virgola. – Mena

+0

Per definire un doppio, il carattere * deve essere. char – fujy

risposta

1

double m[][] dichiara un array di array, cosiddetto array multidimensionale.

m[0] punta a una matrice della dimensione di quattro, contenente 0 * 0,1 * 0,2 * 0,3 * 0. La semplice matematica mostra che i valori sono in realtà 0,0,0,0.

La seconda riga è anch'essa una matrice della dimensione di quattro, contenente 0,1,2,3.

E così via ...

Credo che questo formato mutiple in voi libro è stato quello di mostrare che 0 * 0 è riga 0 della colonna 0, 0 * 1 è riga 0 colonna 1, e così via.

+0

Grazie per la risposta. Ora mi rendo conto che è stata un'inizializzazione piuttosto semplice. – Prateek

19

Questa è sintassi di inizializzatore di array e può essere utilizzata solo sul lato destro quando si dichiara una variabile di tipo di matrice. Esempio:

int[] x = {1,2,3,4}; 
String y = {"a","b","c"}; 

Se non sei sulla RHS di una dichiarazione di variabile, utilizzare un costruttore di matrice invece:

int[] x; 
x = new int[]{1,2,3,4}; 
String y; 
y = new String[]{"a","b","c"}; 

Queste dichiarazioni hanno lo stesso effetto esattamente: un nuovo array è allocato e costruito con i contenuti specificati.

Nel tuo caso, potrebbe in realtà essere più chiaro (meno ripetitivo, ma un po 'meno conciso) per specificare la tabella di programmazione:

double[][] m = new double[4][4]; 

for(int i=0; i<4; i++) { 
    for(int j=0; j<4; j++) { 
     m[i][j] = i*j; 
    } 
} 
+0

Ho sentito la presenza di un maestro zen lì. Vedo leggermente più chiaramente ora ;-) –

+0

Presumibilmente qualcosa di simile così sarebbe come assegnare al doppio doppio usando la sintassi del costruttore '\t \t double [] [] m; \t \t m = new double [] [] { \t \t \t \t new double [] {0 * 0, 1 * 0, 2 * 0, 3 * 0}, \t \t \t \t new double [] {0 * 1, 1 * 1, 2 * 1, 3 * 1}, \t \t \t \t new double [] {0 * 2, 1 * 2, 2 * 2, 3 * 2}, \t \t \t \t nuovo doppio [] {0 * 3, 1 * 3, 2 * 3, 3 * 3} \t \t}; ' –

1

Si chiama inizializzatore di array e può essere spiegato nello Javaspecification 10.6.

Questo può essere utilizzato per inizializzare qualsiasi array, ma può essere utilizzato solo per l'inizializzazione (non l'assegnazione a un array esistente). Una delle cose uniche a riguardo è che le dimensioni dell'array possono essere determinate dall'inizializzatore. Altri metodi per creare un array richiedono l'inserimento manuale del numero. In molti casi, questo aiuta a minimizzare gli errori banali che si verificano quando un programmatore modifica l'inizializzatore e non riesce ad aggiornare le dimensioni.

In pratica, l'inizializzatore alloca una matrice di dimensioni corrette, quindi passa da sinistra a destra per valutare ciascun elemento nell'elenco. La specifica afferma anche che se il tipo di elemento è un array (come è per il tuo caso ... abbiamo una matrice di double []), che ogni elemento può essere di per sé un elenco di inizializzazione, motivo per cui ne vedi uno set esterno di parentesi graffe e ogni linea ha parentesi interne.

+0

Grazie per il tuo risposta. Il mio dubbio è chiaro ora. – Prateek

+1

["Dubbio" per il resto di noi.] (Http://english.stackexchange.com/questions/2429/can-doubt-sometimes-mean-question/4183#4183) –

0

Secondo la mia esperienza, eseguo questo tipo di inizializzazione quando voglio valori fissi nell'array. Lo dichiaro in questo modo nella classe ma fuori dal metodo onCreate, dal momento che non mi consente di farlo in onCreate.

+0

Grazie per la risposta. Il mio dubbio è chiaro ora. – Prateek

+0

["Dubbio" per il resto di noi.] (Http://english.stackexchange.com/questions/2429/can-doubt-sometimes-mean-question/4183#4183) –

0

È possibile inizializzare un array scrivendo valori effettivi che detiene tra parentesi graffe sul lato destro della strada come:

String[] strArr = { "one", "two", "three"}; 
int[] numArr = { 1, 2, 3}; 

Allo stesso modo bidimensionale array o array-of-array contiene una matrice come valore, quindi:

012.351.641,061 mila
String strArrayOfArrays = { {"a", "b", "c"}, {"one", "two", "three"} }; 

Il vostro esempio mostra esattamente che

double m[][] = { 
    {0*0,1*0,2*0,3*0}, 
    {0*1,1*1,2*1,3*1}, 
    {0*2,1*2,2*2,3*2}, 
    {0*3,1*3,2*3,3*3} 
}; 

ma anche la moltiplicazione del numero sarà anche eseguita e la sua lo stesso:

double m[][] = { {0, 0, 0, 0}, {0, 1, 2, 3}, {0, 2, 4, 6}, {0, 3, 6, 9} };