我想知道用 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();
}
您可以用简单的方式打印。
使用下面打印二维数组
int[][] array = new int[rows][columns];
System.out.println(Arrays.deepToString(array));
使用下面打印一维数组
int[] array = new int[size];
System.out.println(Arrays.toString(array));
当我不需要用它们的索引进行算术运算时,我通常更喜欢
foreach
。
for (int[] x : array)
{
for (int y : x)
{
System.out.print(y + " ");
}
System.out.println();
}
打印二维数组的简单干净的方法。
System.out.println(Arrays.deepToString(array).replace("], ", "]\n").replace("[[", "[").replace("]]", "]"));
你所拥有的没有错。双嵌套 for 循环应该很容易被任何阅读你的代码的人理解。
就是说,下面的表述更密集、更地道。我建议尽早研究一些静态实用程序类,如 Arrays 和 Collections。通过有效使用,可以减少大量的样板文件。
for (int[] row : array)
{
Arrays.fill(row, 0);
System.out.println(Arrays.toString(row));
}
新线双线:
for(int[] x: matrix)
System.out.println(Arrays.toString(x));
一个没有换行的班轮:
System.out.println(Arrays.deepToString(matrix));
我猜这是最好的:
for (int[] row : matrix){
System.out.println(Arrays.toString(row));
}
public static String deepToString(Object[] a)
返回“深层内容”的字符串表示 指定数组。如果数组包含其他数组作为元素,则 字符串表示包含它们的内容等等。这个方法 专为将多维数组转换为字符串而设计。
|1 2 3|
|4 5 6|
使用下面的代码打印值。
System.out.println(Arrays.deepToString());
输出将如下所示(一行中的整个矩阵):
[[1,2,3],[4,5,6]]
Java 8 使用 Streams 和 ForEach:
Arrays.stream(array).forEach((i) -> {
Arrays.stream(i).forEach((j) -> System.out.print(j + " "));
System.out.println();
});
第一个
forEach
作为外循环,而下一个作为内循环
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
@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(后进先出)在打印时颠倒顺序。
试试这个,
for (char[] temp : box) {
System.err.println(Arrays.toString(temp).replaceAll(",", " ").replaceAll("\\[|\\]", ""));
}
改编自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();
}
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);
}
}
}
}
你可以对二维数组这样做