Java – Beste manier om 2D-array te printen?

Ik vroeg me af wat de beste manier was om een 2D-array af te drukken. Dit is een code die ik heb en ik vroeg me af of dit een goede gewoonte is of niet. Corrigeer me ook in andere fouten die ik in deze code heb gemaakt als je die vindt. Bedankt!

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();
}

Antwoord 1, autoriteit 100%

U kunt op een eenvoudige manier afdrukken.

Gebruik hieronder om 2D-array af te drukken

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

Gebruik hieronder om 1D-array af te drukken

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

Antwoord 2, autoriteit 16%

Ik zou over het algemeen de voorkeur geven aan forEachals ik geen rekenkundige bewerkingen met hun indices hoef te maken.

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

Antwoord 3, autoriteit 12%

Eenvoudige en overzichtelijke manier om een 2D-array af te drukken.

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

Antwoord 4, autoriteit 6%

Er is niets mis met wat je hebt. Dubbel geneste for-lussen zouden gemakkelijk moeten worden verteerd door iedereen die uw code leest.

Dat gezegd hebbende, de volgende formulering is dichter en meer idiomatisch java. Ik raad aan om wat van de statische hulpprogrammaklassen te bekijken, zoals Arraysen Collectieseerder dan later. Tonnen boilerplate kunnen worden afgeschoren door efficiënt gebruik.

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

Antwoord 5, autoriteit 4%

Two-liner met nieuwe lijn:

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

Eén voering zonder nieuwe regel:

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

Antwoord 6, autoriteit 3%

Dat is het beste denk ik:

  for (int[] row : matrix){
    System.out.println(Arrays.toString(row));
   }

Antwoord 7, autoriteit 2%

Van Oracle officiële Java 8-document:

public static String deepToString(Object[] a)

Retourneert een tekenreeksrepresentatie van de “diepe inhoud” van de
gespecificeerde reeks. Als de array andere arrays als elementen bevat, is de
string representatie bevat hun inhoud enzovoort. Deze methode
is ontworpen voor het omzetten van multidimensionale arrays naar snaren.


Antwoord 8, Autoriteit 2%

|1 2 3|
|4 5 6| 

Gebruik de onderstaande code om de waarden af ​​te drukken.

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

Uitgang ziet er als volgt uit (de hele matrix in één regel):

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

Antwoord 9

@ Ashika’s antwoord werkt fantastisch als u wilt (0,0) in de bovenste, linkerhoek, per normaal CS-conventie wordt weergegeven. Als u echter liever een normaal wiskundig conventie gebruikt en (0,0) in de linkerbovenhoek gebruikt, kunt u dit gebruiken:

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

Deze LIFO (laatste in eerste uit) gebruikte om de bestelling op de afdruktijd om te keren.


Antwoord 10

System.out.println(Arrays.deepToString(array)
                         .replace("],","\n").replace(",","\t| ")
                         .replaceAll("[\\[\\]]", " "));

U kunt ongewenste beugels verwijderen met .replace(), na .deepToStringAls u wilt.
Dat zal eruit zien:

1  |  2  |  3
 4  |  5  |  6
 7  |  8  |  9
 10 |  11 |  12
 13 |  15 |  15

Antwoord 11

Met Java 8 met behulp van streams en foreach:

   Arrays.stream(array).forEach((i) -> {
        Arrays.stream(i).forEach((j) -> System.out.print(j + " "));
        System.out.println();
    });

De eerste forEachfungeert als buitenste lus terwijl de volgende als binnenste lus


Antwoord 12

Probeer dit,

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

Antwoord 13

Aanpassen van https://stackoverflow.com/a/49428678/1527469(om indexen toe te voegen):

System.out.print(" ");
for (int row = 0; row < array[0].length; row++) {
    System.out.print("\t" + row );
}
System.out.println();
for (int row = 0; row < array.length; row++) {
    for (int col = 0; col < array[row].length; col++) {
        if (col < 1) {
            System.out.print(row);
            System.out.print("\t" + array[row][col]);
        } else {
            System.out.print("\t" + array[row][col]);
        }
    }
    System.out.println();
}

Antwoord 14

class MultidimensionalArray {
    public static void main(String[] args) {
        // create a 2d array
        int[][] a = {
                {1, -2, 3},
                { -4, -5, 6, 9},
                {7},
        };
        // first for...each loop access the individual array
        // inside the 2d array
        for (int[] innerArray: a) {
            // second for...each loop access each element inside the row
            for(int data: innerArray) {
                System.out.println(data);
            }
        }
    }
}

Je kunt het zo doen voor 2D-array

Other episodes