例如,如果我有:
int Myarray[][] = new int[][] {{1,2}, {3,4}};
for (int line=0; line < Myarray.length; line++) {
for (int column = 0; column < Myarray[0].length; column++) {
// do something ...
}
}
如果没有两个循环,我怎么能通过整个数组呢?
答案 0 :(得分:2)
嗯,你只能使用一个循环:
for (int i = 0; i < Myarray.length*Myarray.length; i++) {
int row = i / Myarray.length;
int col = i % Myarray.length;
System.out.println(Myarray[row][col]);
}
但这假设您的2D阵列是方形的,即它的宽度和长度在任何地方都是相同的。另一种说法是2D阵列没有锯齿状。
注意:正如上面提到的@Thilo,这不会让事情变得更快。如果你需要触摸数组中的每个元素,那么我建议的代码和你当前的双循环基本上具有相同的复杂性。
答案 1 :(得分:2)
如果您不需要知道“做某事”代码中的行或列(未说明),您可以:
Arrays.stream(Myarray).flatMap(Arrays:stream)
.forEach(n -> /* do something with “n”, the cell value */);
答案 2 :(得分:0)
您可以在没有任何循环的情况下进行迭代:
void recursive(int[][] array, int r, int c) {
if (r >= array.length) return;
if (c >= array[r].length) {
recursive(array, r+1, 0);
} else {
System.out.println(array[r][c]);
recursive(array, r, c+1);
}
}
然后使用recursive(array, 0, 0)
调用以开始使用。
但这样做没有实际好处。这会表现不佳,因为调用方法与增加int相关所需的额外工作。 (另外,根据数组的大小,最终可能会出现堆栈溢出)。