2维数组的区别

3

我想知道在二维数组中,这些循环的区别:

for (int r = row - 1, c = column - 1; r >= 0 && c >= 0; r--, c--) {
    ...
}


for(int r=row-1;r>=0;r--){    
    for(int c=column-1;c>=0;c--){
        ...
    }
}
3个回答

3
for (int r = row - 1, c = column - 1; r >= 0 && c >= 0; r--, c--)

第一个示例是一个循环,每个周期都会减少rc,这意味着索引rc将从array[row-1][column-1]开始绘制对角线。 enter image description here
for(int r=row-1;r>=0;r--){
    for(int c=column-1;c>=0;c--){

第二个示例为每个行索引调用了一个列循环,因此它将访问所有索引array[r][c]
在此输入图片描述

非常感谢!我提出这个问题的原因是我正在制作一个国际象棋游戏,我所使用的循环(int r = row-1, c=column-1; r>=0 && c >=0; r--, c--)用于检查左侧对角线上的棋子,但如何编写一个检查右侧对角线上的循环呢?我尝试了(int r =row+1, c=column-1; r>=0 && c>=0; r--; c--),但它不起作用,因为超出边界异常。 - J.Cool

3

我想您是要求翻译单层循环和嵌套循环之间的区别。区别在于,单层循环将迭代2D数组的对角线,而嵌套循环则将迭代数组的每个索引。例如,如果有6行4列,则:

for (int r = row - 1, c = column - 1; r >= 0 && c >= 0; r--, c--) { 
     System.out.println(r + " " + c);
}

将产生以下结果:

5 3
4 2
3 1
2 0

嵌套循环

for(int r=row-1; r>=0; r--) {
    for(int c=column-1; c>=0; c--) {
        System.out.println(r + " " + c);
    }
}

会产生
5 3
5 2
5 1
5 0
4 3
4 2
4 1
4 0
3 3
3 2
3 1
3 0
2 3
2 2
2 1
2 0
1 3
1 2
1 1
1 0
0 3
0 2
0 1
0 0

1

第一个迭代循环次数为 n,其中 nrowcolumn 中较小的那个。第二个迭代循环次数为 m,其中 mrow * column。也就是说

Math.min(row, column)

并且

row * column

分别。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接