打印 Java2D 数组的最佳方法是什么?

我想知道用 Java 打印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();
}
420948 次浏览

You can print in simple way.

Use below to print 2D array

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

Use below to print 1D array

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

There is nothing wrong with what you have. Double-nested for loops should be easily digested by anyone reading your code.

That said, the following formulation is denser and more idiomatic java. I'd suggest poking around some of the static utility classes like Arrays and Collections sooner than later. Tons of boilerplate can be shaved off by their efficient use.

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

@Ashika's answer works fantastically if you want (0,0) to be represented in the top, left corner, per standard matrix convention. If however you would prefer to put (0,0) in the lower left hand corner, in the style of the standard coordinate system, you could use this:

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

This used LIFO (Last In First Out) to reverse the order at print time.

I would prefer generally foreach when I don't need making arithmetic operations with their indices.

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

That's the best I guess:

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

Use the code below to print the values.

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

Output will look like this (the whole matrix in one line):

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

Simple and clean way to print a 2D array.

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

Try this,

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

Two-liner with new line:

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

One liner without new line:

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

From Oracle Offical Java 8 Doc:

public static String deepToString(Object[] a)

Returns a string representation of the "deep contents" of the specified array. If the array contains other arrays as elements, the string representation contains their contents and so on. This method is designed for converting multidimensional arrays to strings.

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

You can remove unwanted brackets with .replace(), after .deepToString if you like. That will look like:

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

Adapting from https://stackoverflow.com/a/49428678/1527469 (to add indexes):

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

You can do it like this for 2D array

With Java 8 using Streams and ForEach:

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

The first forEach acts as outer loop while the next as inner loop