95

我想知道打印二维数组的最佳方法是什么。这是我拥有的一些代码,我只是想知道这是否是好的做法。如果您发现任何其他错误,也请纠正我在此代码中犯的任何其他错误。谢谢!

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

14 回答 14

201

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

使用下面打印二维数组

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

使用下面打印一维数组

int[] array = new int[size];
System.out.println(Arrays.toString(array));
于 2013-10-29T01:56:56.090 回答
30

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

for (int[] x : array)
{
   for (int y : x)
   {
        System.out.print(y + " ");
   }
   System.out.println();
}
于 2017-01-08T13:25:34.893 回答
23

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

System.out.println(Arrays.deepToString(array).replace("], ", "]\n").replace("[[", "[").replace("]]", "]"));
于 2017-09-02T20:46:01.553 回答
12

你所拥有的没有任何问题。阅读您的代码的任何人都应该很容易理解双重嵌套的 for 循环。

也就是说,以下公式是更密集和更惯用的 java.lang. 我建议尽早探索一些静态实用程序类,如数组集合。大量的样板可以通过有效使用来减少。

for (int[] row : array)
{
    Arrays.fill(row, 0);
    System.out.println(Arrays.toString(row));
}
于 2013-10-29T02:00:14.103 回答
8

新线两班轮:

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

一个没有新线的班轮:

System.out.println(Arrays.deepToString(matrix));
于 2018-10-29T21:33:38.747 回答
6

这是我猜的最好的:

   for (int[] row : matrix){
    System.out.println(Arrays.toString(row));
   }
于 2017-05-25T15:43:42.373 回答
4
|1 2 3|
|4 5 6| 

使用下面的代码打印值。

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

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

[[1,2,3],[4,5,6]]
于 2017-08-08T15:06:57.943 回答
4

来自Oracle 官方 Java 8 文档

public static String deepToString(Object[] a)

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

于 2018-12-11T01:15:04.517 回答
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
于 2019-12-25T14:27:57.753 回答
2

如果您希望按照标准矩阵约定在左上角表示 (0,0),@Ashika 的答案非常有效。但是,如果您希望以标准坐标系的样式将 (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(后进先出)在打印时颠倒顺序。

于 2016-03-03T18:06:00.147 回答
2

在 Java 8 中使用 Streams 和 ForEach:

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

第一个forEach充当外循环,而下一个充当内循环

于 2021-01-26T10:06:35.217 回答
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);
            }
        }
    }
}

您可以对 2D 数组执行此操作

于 2020-12-18T05:51:11.530 回答
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();
}
于 2020-08-22T18:47:18.143 回答
0

Try this,

for (char[] temp : box) {
    System.err.println(Arrays.toString(temp).replaceAll(",", " ").replaceAll("\\[|\\]", ""));
}
于 2018-08-31T09:38:46.577 回答