看看:
int[] v = new int[10];
for (int i = 0; i < v.length; i++) {
for (int j = i + 1; j < v.length; j++) {
if (v[i] > v[j]) {
aux = v[i];
v[i] = v[j];
v[j] = aux;
}
}
}
这完全有效。但有人可以解释一下吗?
即使我使用j
启动i + 1
,此阵列如何 NOT 也会超出范围?这是如何运作的?
答案 0 :(得分:1)
您已将初始化与条件混淆。 for循环()的语法是 -
s1[i] < 0
因此即使你从1开始j(j = i + 1和i = 0的初始值),j也只会更新直到它等于数组的长度v即10。所以那一刻,j = 10(当i = 9时),控制将从j for loop()出来,当它将转移到i for loop()时,我将更新为10,从而满足它的条件并将控制移出i for loop()也是。
答案 1 :(得分:0)
我认为你需要回到for循环的基础
for循环可以定义为for(before starting;continue when true;do at end of pass))
所以你的起始值是什么并不重要,只要j等于v.length,它就会停止。如果你从i开始,它只会少一个循环。
答案 2 :(得分:0)
你的for循环由变量组成,以跟踪,条件和迭代。在你的代码中,for循环的条件表明保持跟踪的变量不能超过v的长度。因此,在排序期间(因为这就是代码),内循环使用j比较所有v的值。作为交换的索引,如果它们符合if条件。外部循环就是为了确保v的每个索引都被检查并且位于正确的位置。