迭代变量在for循环之外为+1?

时间:2019-03-15 14:03:44

标签: java arrays

我有一个大小为4的数组,我想检查该数组是否包含数字8(显然不是,数字仅用于测试)。

在for循环中,j从0变为3,所以循环中j的最终值为3。但是,我不理解为什么循环之后j 的值是更改为4,为什么还不是3?

public class Test {
    public static void main (String[] args) {
        int[] a = new int[4];
        a[0] = 2; 
        a[1] = 3;
        a[2] = 4;
        a[3] = 5;
        int n = a.length;    // n = 4
        int number = 8;
        int j;
        for (j = 0; j < n; j++) {
            if (a[j] == number) {
                System.out.println("The number is at place " + j);
                break;
            }
            // Last value of j is 3:
            System.out.println("Value of j after each iteration " + j); 
        }
        // But here j is 4?
        System.out.println("Value of j after the for-loop: " + j); 
     }
}

输出:

  

每次迭代后j的值0
  每次迭代1后j的值
  每次迭代2后j的值
  每次迭代3后j的值
  for循环后j的值:4

3 个答案:

答案 0 :(得分:7)

是,因为在for循环的末尾,变量有一个增​​量。 for循环可以重写为:

int j = 0;
while(j < n) {
    //code
    j++;
}

因此,在上一次迭代中,j将递增,它将转到条件,并且它将为false,因此将不输入for循环的主体。为了结束循环,j必须大于或等于条件。

答案 1 :(得分:1)

编程新手?

for(initialization; booleanExpression; updateStatement) {
  ; // Body
}

步骤是

  1. 初始化语句执行
  2. 如果booleanExpression为true,则继续,否则退出循环
  3. 身体执行
  4. 执行updateStatements
  5. 返回步骤2

因此最终值应为4

答案 2 :(得分:1)

考虑一下...

这是您的for循环:

 for (j = 0; j < n; j++){
   //your code here
 }

以j = 0开始for循环,每次循环访问时,都必须检查该值是否小于n(j

这就是n = 4的情况:

  • 第一次迭代:

    j = 0; 0 < 4 == true; // you execute your code j++; //As you can see you increment before you continue to the next iteration

  • 第二次迭代:

    j = 1; // j now equals 1 because you incremented it on the previous iteration 1 < 4 == true; // you execute your code j++;

  • 第三次迭代:

    j = 2; 2 < 4 == true; // you execute your code j++;

  • 第4次迭代:

    j = 3; 3 < 4 == true; // you execute your code j++;

  • 第5次迭代:

    j = 4; 4 < 4 == false; // loop ends

如您所见,当您的代码即将开始第五次迭代时,j变量现在等于4,因此它不通过j

但是,它仍然在第4次迭代中递增,因此您得到j = 4。

这就是我刚开始编码培训时老师对我的解释,希望它对您有所帮助!