2013-10-29 12 views
29

Mi chiedevo quale fosse il modo migliore per stampare un array 2D. Questo è un codice che ho e mi stavo chiedendo se questa è una buona pratica o no. Inoltre correggimi in tutti gli altri errori che ho fatto in questo codice se ne trovi. Grazie!Java: il modo migliore per stampare array 2D?

int rows = 5; 
int columns = 3; 

int[][] array = new int[rows][columns]; 

for(int i = 0; i<rows; i++) 
    for(int j = 0; j<columns; j++) 
     array[i][j] = 0; 

for(int i = 0; i<rows; i++) 
{ 
    for(int j = 0; j<columns; j++) 
    { 
     System.out.print(array[i][j]); 
    } 
    System.out.println(); 
} 
+3

Best - by quale definizione? –

+0

I loop for sarebbero più sicuri se usassero le lunghezze degli array effettivi. –

+1

Questa domanda sembra essere off-topic perché riguarda la revisione del codice senza una domanda specifica e appartiene a [codereview.se] –

risposta

77

È possibile stampare in modo semplice.

Usa di seguito per stampare array 2D

int[][] array = new int[rows][columns]; 
System.out.println(Arrays.deepToString(array)); 

Usa di seguito per stampare serie 1D

int[] array = new int[size]; 
System.out.println(Arrays.toString(array)); 
+3

Il 2D versione stampe tutto su una sola linea, che non è ok :( –

+0

@DangManhTroung quindi scrivere un ciclo for con una linea di stampa – JakeWilson801

+3

So che questo è un po 'più tardi, ma questo stampa tutto su linee separate.[Ho preso questo da questa risposta] (https://stackoverflow.com/questions/12845208/how-to-print-two-dimensional-array-like-table#17423410) 'System.out.println (Arrays.deepToString (twoDm) .replace ("],", "] \ n")); ' – wanderer0810

5

Non c'è niente di sbagliato in quello che hai. I loop double-nested devono essere facilmente digeriti da chiunque legga il tuo codice.

Detto questo, la seguente formulazione è più densa e più idiomatica di Java. Suggerirei di dare un'occhiata ad alcune delle classi di utilità statiche come Arrays e Collections prima possibile. Tonnellate di caldaia possono essere rasate via dal loro uso efficiente.

+0

Questa soluzione stamperà la matrice con (0,0) nell'angolo in alto a sinistra (che è la convenzione per la maggior parte delle cose in CS, come come posizionamento GUI o posizione Pixel in un'immagine). In molti scenari non cs, si vorrebbe (0,0) essere nell'angolo in basso a sinistra, tuttavia, nel qual caso un ciclo foreach non funzionerà. –

1

@ La risposta di Ashika funziona in modo fantastico se si desidera (0,0) essere rappresentato nell'angolo in alto a sinistra, per convenzione CS normale. Se invece si preferisce utilizzare normale convenzione matematica e mettere (0,0) nell'angolo in basso a sinistra, è possibile utilizzare questo:

LinkedList<String> printList = new LinkedList<String>(); 
for (char[] row: array) { 
    printList.addFirst(Arrays.toString(row));; 
} 
while (!printList.isEmpty()) 
    System.out.println(printList.removeFirst()); 

Questo era LIFO (Last In First Out) per invertire l'ordine al tempo di stampa

6

Preferirei in genere foreach quando non è necessario eseguire operazioni aritmetiche con i relativi indici.

for (int[] x : array) 
{ 
    for (int y : x) 
    { 
     System.out.print(y + " "); 
    } 
    System.out.println(); 
} 
3

Questo è il miglior immagino:

for (int[] row : matrix){ 
    System.out.println(Arrays.toString(row)); 
    } 
1
|1 2 3| 
|4 5 6| 

Utilizza il codice qui sotto per stampare i valori.

System.out.println(Arrays.deepToString()); 

output sarà simile a questa (l'intera matrice in una sola riga):

[[1,2,3],[4,5,6]] 
5

modo semplice e pulito per stampare una matrice 2D.

System.out.println(Arrays.deepToString(array).replace("], ", "]\n").replace("[[", "[").replace("]]", "]")); 
Problemi correlati