Java - 打印2D阵列的最佳方式?

时间:2013-10-29 01:46:45

标签: java arrays printing

我想知道打印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();
}

14 个答案:

答案 0 :(得分:115)

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

使用以下方法打印2D数组

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

使用以下方法打印1D阵列

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

答案 1 :(得分:17)

当我不需要使用索引进行算术运算时,我更倾向于foreach

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

答案 2 :(得分:16)

简单而干净的打印2D阵列的方法。

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

答案 3 :(得分:7)

你拥有的东西没有错。任何阅读代码的人都应该轻易消化双嵌套for循环。

也就是说,以下公式更密集,更具惯用性。我建议尽早探讨一些静态实用程序类,如ArraysCollections。可以通过有效使用来减少大量的样板。

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

答案 4 :(得分:4)

我认为这是最好的:

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

答案 5 :(得分:1)

@ Ashika的回答非常有效,如果你想要(0,0)按照正常的CS惯例在左上角表示。但是,如果你更喜欢使用普通的数学约定并在左下角放置(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(后进先出)在打印时反转顺序。

答案 6 :(得分:1)

|1 2 3|
|4 5 6| 

使用以下代码打印值。

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

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

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

答案 7 :(得分:1)

两行加换行符:

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

一个没有换行的班轮:

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

答案 8 :(得分:1)

在 Java 8 中使用 Streams 和 ForEach:

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

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

答案 9 :(得分:0)

尝试一下

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

答案 10 :(得分:0)

来自Oricle Offical Java 8 Doc

public static String deepToString(Object[] a)

  

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

答案 11 :(得分:0)

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

答案 12 :(得分: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();
}

答案 13 :(得分: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阵列执行此操作