2010-04-14 18 views
7

Fondamentalmente, sto provando questo, ma questo lascia solo array riempito con zeros. Io so come riempire con il normale ciclo for comeCome riempire l'array bidimensionale utilizzando il loop avanzato di java?

for (int i = 0; i < array.length; i++) 

ma perché la mia variante non sta funzionando? Qualsiasi aiuto sarebbe apprezzato.

char[][] array = new char[x][y]; 
for (char[] row : array) 
    for (char element : row) 
     element = '~'; 

risposta

7

Dal Sun Java Docs:

Quindi, quando si dovrebbe utilizzare il ciclo for-each?

Ogni volta che puoi. Abbellisce davvero il tuo codice. Purtroppo, non è possibile utilizzare ovunque. Si consideri, ad esempio, il metodo expurgate. Il programma deve accedere all'iteratore per rimuovere l'elemento corrente. Il ciclo for-each nasconde l'iteratore, quindi non è possibile chiamare remove. Pertanto, il ciclo for-each non è utilizzabile per il filtraggio. Analogamente, non è utilizzabile per i loop in cui è necessario sostituire gli elementi in un elenco o array mentre lo si attraversa.

+0

Così, con iteratore che avrebbe funzionato? Grazie per la risposta. – Shark

+1

@Shark: gli array non forniscono un iteratore (a meno che non li avvolgano usando 'Arrays.asList()'), ma un normale ciclo for old-old funziona bene. –

4

Ciò è perché il char element non è un puntatore alla posizione di memoria all'interno della matrice, è una copia del carattere, in modo da cambiare cambierà solo la copia. Quindi puoi usare questo modulo solo quando fai riferimento a matrici e oggetti (non a tipi semplici).

0

L'assegnazione modifica semplicemente la variabile locale element.

13

Thirler ha spiegato perché questo non funziona. Tuttavia, è possibile utilizzare Arrays.fill per aiutarvi a inizializzare le matrici:

char[][] array = new char[10][10]; 
    for (char[] row : array) 
     Arrays.fill(row, '~'); 
+0

Grazie per il suggerimento :) – Shark

+0

Grazie per il suggerimento – SHiRKiT

Problemi correlati