我在二维数组上有这个完全正常的循环。
for(int i = 0; i<array.length; i++){
for(int j = 0; i<array.length; j++){
array[i][j].doSomething();
}
}
我想遍历这个二维数组,从中间开始。例如,如果数组的两个维度的长度均为 100,我希望它像这样遍历它:
array[50][50] //middle of array
array[49][50] //x-1
array[50][49] //y-1
array[51][50] //x+1
array[50][51] //y+1
array[48][50] //x-2
array[49][49] //x-1 and y-1
array[50][48] //y-2
array[51][49] //x+1 and y-1
array[52][50] //x+2
array[51][51] //x+1 and y+1
array[50][52] //y+2
array[49][51] //x-1 and y+1
etc.
我花了几个小时在互联网上寻找有效的方法和解决方案,但我还没有找到很好的答案。谁知道怎么做?
最佳答案
这不会为您提供任何 Java 代码,而是提供有关如何解决该问题的想法。
在一张纸上画出尺寸小得多的数组的网格,并在每个单元格中画出应该到达单元格的数字。
[ ][ ][ ][ ][ ]
[ ][ ][ ][ ][ ]
[ ][ ][1][ ][ ]
[ ][ ][ ][ ][ ]
[ ][ ][ ][ ][ ]
[ ][ ][ ][ ][ ]
[ ][ ][3][ ][ ]
[ ][2][1][4][ ]
[ ][ ][5][ ][ ]
[ ][ ][ ][ ][ ]
[ ][ ][8][ ][ ]
[ ][7][3][9][ ]
[6][2][1][4][A]
[ ][D][5][B][ ]
[ ][ ][C][ ][ ]
[ ][F][8][G][ ]
[E][7][3][9][H]
[6][2][1][4][A]
[L][D][5][B][I]
[ ][K][C][J][ ]
[M][F][8][G][N]
[E][7][3][9][H]
[6][2][1][4][A]
[L][D][5][B][I]
[P][K][C][J][O]
清晰可见的是“蜗牛”图案。您总是填充先前填充的单元格的外部相邻单元格。
忽略第一次迭代填充的字段的外边界
1 cell - then
4 cells
8 cells
12 cells
... +4 cells
就循环而言,您不应该使用 (i,j)
进行循环,这两者都反射(reflect)了数组中的索引。而是遍历 round
,然后打印该特定回合中的各个单元格。在回合 X
中,您从字段 arrayLength/2 - X
开始。
关于Java - 从中间开始遍历二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34556387/