Java 对于循环执行,增量混淆

Java 对于循环执行,增量混淆,java,arrays,eclipse,for-loop,Java,Arrays,Eclipse,For Loop,我不明白为什么fillArray方法中的I最终等于10,即使数组分数只填充到索引9 根据我的理解,i必须小于10,因此它最终如何成为10,它应该是递增的 我尝试了另一个循环来测试for循环是否在条件为true时执行递增 在测试循环i中,结果只有10,这是有意义的,但for循环的两个值相互矛盾 public class GoldScores { public static final int MAX_NUMBER_SCORES = 10; public static

我不明白为什么
fillArray
方法中的
I
最终等于
10
,即使数组分数只填充到
索引9

根据我的理解,
i
必须小于
10
,因此它最终如何成为
10
,它应该是递增的

我尝试了另一个循环来测试for循环是否在条件为true时执行递增

在测试循环
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;
        }
public class GoldScores{
公共静态最终整数最大整数分数=10;
公共静态void main(字符串[]args){
double[]得分=新的double[MAX_NUMBER_得分];
int numberUsed=0;
System.out.println(“该程序读取黄金分数并显示”);
System.out.println(“每个与平均值相差多少”);
System.out.println(“输入黄金分数:”);
//numberUsed=填充数组(分数);
//显示差异(分数、数字);

对于(int i=1;i=0&&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
    循环是如何工作的,才能理解发生了什么,以及为什么
    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 < /代码> ./p> 在循环条件下,增量是在测试循环条件之后发生的,所以在最后一次迭代中,当你的条件被检查时,我已经等于10,这正是被返回的。考虑一下,如果你在最后一次迭代中仍然是9,那么你的条件仍然是真的,这意味着再执行一次。在循环中,增量是在测试循环条件之后发生的,而不是在之前,所以在最后一次迭代中,当你的条件被检查时,我已经等于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;
    int电流_i=i;
    对于(i=0;(下一步>=0&&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;
    
    double-next=keyboard.nextDouble();
    int i=0;
    
    对于(i=0;(next>=0&&i),其他人已经详细解释了,为了消除混淆,您可以将代码修改为:

            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;
    int电流_i=i;
    对于(i=0;(下一步>=0&&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;
    
    double-next=keyboard.nextDouble();
    int i=0;
    
    对于(i=0;(next>=0&&i)上面没有工作的是什么?你得到了什么输出?你期望得到什么输出?Java数组从
    0
    开始。Index
    9
    是最后一个有值的位置。Index
    10
    将是不允许的。所有东西都可以工作,但我不明白为什么是“i”fillArray中的for循环结束时为10,即使10