我不明白为什么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<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;
}
答案 0 :(得分:5)
您必须准确了解for
循环如何理解正在发生的事情,以及i
在10
循环后for
为fillArray
的原因false
i
,则跳出循环。在for
i
循环的最后一次迭代中,9
为9
,并且在数组中分配了索引i
,步骤3。 4执行增量,10
现在为false
。 然后测试条件,即i
,并退出循环。 10
现在是main
。
但是,在for
i
循环中,您可以在正文中打印值,而不是在之后检查循环变量。最后一次迭代是10
为i < 11
时,因为条件不同:i
。如果您在for
循环后打印11
,则会看到GraphicsPath
。
答案 1 :(得分:0)
在For循环中,在测试循环条件之后发生增量,而不是之前。因此,在检查条件时的最后一次迭代中,我已经等于10,这正是返回的内容。考虑一下,如果你在最后一次迭代中仍然是9,你的条件仍然是真的,这意味着在循环中再执行一次。
答案 2 :(得分:0)
虽然其他人已经详细解释过,但为了消除混淆,您可以将代码修改为:
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<a.length);i++){ //HELP!!!!
a[i] = next;
next = keyboard.nextDouble();
}
return i;