对于循环执行,增加混淆

时间:2015-06-16 23:36:02

标签: java arrays eclipse for-loop

我不明白为什么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;
        }

3 个答案:

答案 0 :(得分:5)

您必须准确了解for循环如何理解正在发生的事情,以及i10循环后forfillArray的原因false

  1. 在第一个分号之前执行初始化。
  2. 测试第一个和第二个分号之间的条件。如果条件为i,则跳出循环。
  3. 执行循环体。
  4. 在第二个分号(增量)之后执行语句。
  5. 返回第2步。
  6. for i循环的最后一次迭代中,99,并且在数组中分配了索引i,步骤3。 4执行增量,10现在为false然后测试条件,即i,并退出循环。 10现在是main

    但是,在for i循环中,您可以在正文中打印值,而不是在之后检查循环变量。最后一次迭代是10i < 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;