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();
}
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));
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();
}
Einfache und saubere Methode zum Drucken eines 2D-Arrays.
System.out.println(Arrays.deepToString(array).replace("], ", "]\n").replace("[[", "[").replace("]]", "]"));
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));
}
Das ist das Beste, was ich denke:
for (int[] row : matrix){
System.out.println(Arrays.toString(row));
}
|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]]
@ 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.
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));
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.
Versuche dies,
for (char[] temp : box) {
System.err.println(Arrays.toString(temp).replaceAll(",", " ").replaceAll("\\[|\\]", ""));
}