For loop execution, increment confusion

前端 未结 3 1483
既然无缘
既然无缘 2020-12-22 05:10

I don\'t get it why i in fillArray method ends up being equal to 10 even though the array score is filled only up to index 9

相关标签:
3条回答
  • 2020-12-22 05:39

    You must understand exactly how the for loop works to understand what is going on, and why i is 10 after the for loop in fillArray.

    1. Perform initialization, before the first semicolon.
    2. Test the condition in between the first and second semicolons. If the condition is false, break out of the loop.
    3. Execute the body of the loop.
    4. Perform the statement after the second semicolon (the increment).
    5. Go back to Step 2.

    In the last iteration of the i for loop, i is 9, and index 9 is assigned in the array, step 3. Step 4 performs the increment, and i is now 10. Then the condition is tested, which is false, and the loop is exited. i is now 10.

    However, in your main for loop, you print the value in the body instead of examining the looping variable afterwards. The last iteration is when i is 10, because the condition is different: i < 11. If you were to print i after that for loop, you'll see it's 11.

    0 讨论(0)
  • 2020-12-22 05:43

    While others have already explained in detail , to eliminate confusion you could modify your code to something like :

            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;
    

    instead of

            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 讨论(0)
  • 2020-12-22 06:00

    in For loop, increment occurs after testing loop condition, not before. So in last iteration when your condition is checked, I is already equal to 10 and that is exactly what is being returned. Consider this, if your I would still be 9 in last iteration, your condition would still be true which would mean one more execution in loop.

    0 讨论(0)
提交回复
热议问题