web-dev-qa-db-de.com

Java - der beste Weg, um ein 2D-Array zu drucken?

Ich habe mich gefragt, was der beste Weg ist, ein 2D-Array zu drucken. Dies ist ein Code, den ich habe und ich habe mich nur gefragt, ob dies eine gute Praxis ist oder nicht. Korrigieren Sie mich auch bei anderen Fehlern, die ich in diesem Code gemacht habe, wenn Sie welche finden. Vielen Dank!

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();
}
42
Chip Goon Lewin

Sie können auf einfache Weise drucken.

Verwenden Sie unten, um ein 2D-Array zu drucken

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

Verwenden Sie unten, um ein 1D-Array zu drucken

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

Ich würde generell foreach vorziehen, wenn ich keine arithmetischen Operationen mit ihren Indizes durchführen muss.

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

Einfache und saubere Methode zum Drucken eines 2D-Arrays. 

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

Es ist nichts falsch mit dem, was Sie haben. Doppelte verschachtelte Schleifen sollten von jedem, der Ihren Code liest, leicht verdaut werden können. 

Allerdings ist die folgende Formulierung dichteres und idiomatischeres Java. Ich würde vorschlagen, einige der statischen Hilfsklassen wie Arrays und Collections früher als später zu durchsuchen. Tonnen von Boilerplate können durch ihre effiziente Verwendung abgeschabt werden.

for (int[] row : array)
{
    Arrays.fill(row, 0);
    System.out.println(Arrays.toString(row));
}
7
ashika

Das ist das Beste, was ich denke: 

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

Verwenden Sie den folgenden Code, um die Werte zu drucken.

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

Die Ausgabe sieht folgendermaßen aus (die gesamte Matrix in einer Zeile):

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

@ Ashikas Antwort funktioniert hervorragend, wenn Sie (0,0) in der oberen linken Ecke gemäß normaler CS-Konvention darstellen möchten. Wenn Sie jedoch lieber eine normale mathematische Konvention verwenden und (0,0) in die linke untere Ecke setzen, können Sie Folgendes verwenden:

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

Dies verwendete LIFO (Last In First Out), um die Reihenfolge zum Druckzeitpunkt umzukehren.

1
Max von Hippel

2-Liner mit neuer Linie:

for(int[] x: matrix)
            System.out.println(Arrays.toString(x));

Ein Liner ohne neue Linie:

System.out.println(Arrays.deepToString(matrix));
1
suvojit_007

From Oricle Offical Java 8 Doc :

public static String deepToString(Object[] a)

Gibt eine Zeichenfolgendarstellung des "tiefen Inhalts" des angegebenen Arrays zurück. Wenn das Array andere Arrays als Elemente enthält, enthält die Zeichenfolgendarstellung deren Inhalt usw. Diese Methode dient zum Konvertieren mehrdimensionaler Arrays in Zeichenfolgen.

0
ZhaoGang

Versuche dies,

for (char[] temp : box) {
    System.err.println(Arrays.toString(temp).replaceAll(",", " ").replaceAll("\\[|\\]", ""));
}
0
RAN_0915