我不明白为什么 fillArray
方法中的 i
最终等于 10
即使数组分数仅被填充到索引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<11; i++){ //Test loop
System.out.println("Count is: " + i);
}
}
private static void showdifference(double[] score, int numberUsed) {
// TODO Auto-generated method stub
}
public static int fillArray(double[] a){
System.out.println("Enter up to " + a.length + " nonnegative numbers.");
System.out.println("Mark the end of the list with a negative number.");
Scanner keyboard = new Scanner(System.in);
double next = keyboard.nextDouble();
int i = 0;
for(i = 0;(next>=0 && i<a.length);i++){ //HELP!!!!
a[i] = next;
next = keyboard.nextDouble();
}
return i;
}
最佳答案
您必须准确理解 for
是如何工作的循环可以理解正在发生的事情以及原因 i
是 10
for
之后循环输入fillArray
.
- 在第一个分号之前执行初始化。
- 测试第一个和第二个分号之间的条件。如果条件是
false
,跳出循环。 - 执行循环体。
- 执行第二个分号(增量)后的语句。
- 返回第 2 步。
在 i
的最后一次迭代中for
循环,i
是 9
,和索引 9
被分配到数组中,步骤 3。步骤 4 执行增量,并且 i
现在是10
。 然后测试条件,即 false
,然后退出循环。 i
现在是10
.
但是,在您的 main
中for
循环时,您可以打印主体中的值,而不是事后检查循环变量。最后一次迭代是在 i
时是 10
,因为条件不同:i < 11
。如果您要打印 i
之后for
循环,你会看到它是 11
.
关于java - 对于循环执行,增加困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30879998/