对于循环执行,增加混淆
我不明白为什么i
在fillArray
方法中最终等于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
循环如何工作以了解正在发生的事情,以及为什么i
在fillArray
的for
循环后为10
。
- 在第一个分号之前执行初始化。
- 测试第一个和第二个分号之间的条件。 如果条件为
false
,则跳出循环。 - 执行循环体。
- 在第二个分号(增量)后执行语句。
- 回到第2步。
在i
for
循环的最后一次迭代中, i
为9
,并且在数组中分配索引9
,步骤3.步骤4执行增量, i
现在为10
。 然后测试条件,这是false
,并且退出循环。 i
现在10
。
但是,在main
for
循环中,您可以在正文中打印值,而不是之后检查循环变量。 最后一次迭代是当i
是10
,因为条件不同: 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