打印 Java 二维数组的最佳方式? [关闭]

问题描述 投票:0回答:14

我想知道用 Java 打印二维数组的最佳方法是什么?

我只是想知道这段代码是否是好的做法?
还有我在这段代码中犯的任何其他错误,如果你发现的话。

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();
}
java arrays multidimensional-array printing 2d
14个回答
230
投票

您可以用简单的方式打印。

使用下面打印二维数组

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

使用下面打印一维数组

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

32
投票

当我不需要用它们的索引进行算术运算时,我通常更喜欢

foreach

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

27
投票

打印二维数组的简单干净的方法。

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

12
投票

你所拥有的没有错。双嵌套 for 循环应该很容易被任何阅读你的代码的人理解。

就是说,下面的表述更密集、更地道。我建议尽早研究一些静态实用程序类,如 ArraysCollections。通过有效使用,可以减少大量的样板文件。

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

9
投票

新线双线:

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

一个没有换行的班轮:

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

6
投票

我猜这是最好的:

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

5
投票

来自Oracle Offical Java 8 Doc

public static String deepToString(Object[] a)

返回“深层内容”的字符串表示 指定数组。如果数组包含其他数组作为元素,则 字符串表示包含它们的内容等等。这个方法 专为将多维数组转换为字符串而设计。


4
投票
|1 2 3|
|4 5 6| 

使用下面的代码打印值。

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

输出将如下所示(一行中的整个矩阵):

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

3
投票

Java 8 使用 Streams 和 ForEach:

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

第一个

forEach
作为外循环,而下一个作为内循环


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

如果愿意,您可以在

.replace()
之后使用
.deepToString
删除不需要的括号。 看起来像:

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

2
投票

@Ashika 的答案非常有效,如果您希望 (0,0) 按照标准矩阵约定在左上角表示。但是,如果您更喜欢将 (0,0) 放在左下角,按照标准坐标系的样式,您可以使用:

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

这使用 LIFO(后进先出)在打印时颠倒顺序。


0
投票

试试这个,

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

0
投票

改编自https://stackoverflow.com/a/49428678/1527469(添加索引):

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

0
投票
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);
            }
        }
    }
}

你可以对二维数组这样做

© www.soinside.com 2019 - 2024. All rights reserved.