如何从二维数组中打印坐标



如何从2d数组中打印坐标?我必须从数字5所在的位置打印坐标。这些数字是使用Math.random随机生成的数组。这是代码:

public class MultiArrays {
public static void main(String[] args) {
int[][] array = new int[3][4];
for (int index = 0; index < array.length; index++) {
for (int j = 0; j < array[index].length; j++) {
array[index][j] = (int) (Math.random() * 10);
}
}
for (int column = 0; column < array[0].length; column++) {
for (int row = 0; row < array.length; row++) {
System.out.print(array[row][column] + " | ");
}
System.out.println();
}
}
}

我想你要找的是:

for (int row = 0; row < array.length; row++) {
for (int col = 0; col < array[row].length; col++) {
if (array[row][col] == 5) {
System.out.println("Row: " + row + " Col: " + col + " has value 5");
}
}
}

它将第一行/列视为0(从0开始(

这看起来像Java,而不是JavaScript(只是注意,这是基于问题上的标记(。它们是非常不同的东西,所以要清楚。

我也不清楚你所说的"当数字是5时"是什么意思。你的意思是多维数组的第二个值是5吗?

如果是这样的话,在你的第二个outer-for循环中会有一堆混乱。您可能希望迭代array的所有值(因此是array.length(,然后迭代这些值的所有内部值。

当数组的内部(右侧(值为5时,要输出数组的值,需要一个进行System.out调用的条件。

您可以将IntStream用于此目的:

int m = 3;
int n = 4;
// random array (n * m)
int[][] arr1 = IntStream.range(0, n)
.mapToObj(i -> IntStream.range(0, m)
// generate random array
.map(j -> (int) (Math.random() * 10))
.toArray())
.toArray(int[][]::new);
int x = 5;
// finding (x) coordinates
int[][] arr2 = IntStream.range(0, arr1.length)
.mapToObj(i -> IntStream.range(0, arr1[i].length)
.filter(j -> arr1[i][j] == x)
// (x) coordinates
.mapToObj(j -> new int[]{i, j})
.toArray(int[][]::new))
.flatMap(Arrays::stream)
.toArray(int[][]::new);
// output
Arrays.stream(arr1).map(Arrays::toString).forEach(System.out::println);
Arrays.stream(arr2).map(Arrays::toString).forEach(System.out::println);

输出:

[3, 0, 5]
[8, 6, 1]
[4, 7, 1]
[5, 0, 3]
[0, 2]
[3, 0]

最新更新