对于循环执行,增加混淆

我不明白为什么ifillArray方法中最终等于10即使数组分数仅填充到index 9

根据我的理解, i必须小于10 ,所以它最终如何最终为10 ,它应该增加。

我尝试了另一个循环来测试如果条件为真,for循环是否在最后执行递增。

在测试循环中, i最终只有10才有意义,但两个for循环相矛盾。

 public class GoldScores { public static final int MAX_NUMBER_SCORES = 10; public static void main(String[] args) { double[] score = new double[MAX_NUMBER_SCORES]; int numberUsed = 0; System.out.println("This program reads gold scores and shows"); System.out.println("how much each differs from the average."); System.out.println("Enter gold scores:"); //numberUsed = fillArray(score); // showdifference(score,numberUsed); for(int i=1; i=0 && i<a.length);i++){ //HELP!!!! a[i] = next; next = keyboard.nextDouble(); } return i; } 

您必须准确理解for循环如何工作以了解正在发生的事情,以及为什么ifillArrayfor循环后为10

  1. 在第一个分号之前执行初始化。
  2. 测试第一个和第二个分号之间的条件。 如果条件为false ,则跳出循环。
  3. 执行循环体。
  4. 在第二个分号(增量)后执行语句。
  5. 回到第2步。

i for循环的最后一次迭代中, i9 ,并且在数组中分配索引9 ,步骤3.步骤4执行增量, i现在为10然后测试条件,这是false ,并且退出循环。 i现在10

但是,在main for循环中,您可以在正文中打印值,而不是之后检查循环变量。 最后一次迭代是当i10 ,因为条件不同: i < 11 。 如果你在那之后打印i for循环,你会看到它是11

在For循环中,增量发生在测试循环条件之后,而不是之前。 因此,在检查条件的最后一次迭代中,我已经等于10,这正是返回的内容。 考虑一下,如果你在上一次迭代中我仍然是9,你的条件仍然是真的,这意味着在循环中再执行一次。

虽然其他人已经详细解释过,为了消除混淆,您可以将代码修改为:

  double next = keyboard.nextDouble(); int i = 0; int current_i = i; for( i = 0; ( next >= 0 && i < a.length ); i++ ) { current_i = i; a[i] = next; next = keyboard.nextDouble(); } return current_i; 

代替

  double next = keyboard.nextDouble(); int i = 0; for(i = 0;(next>=0 && i