2016-07-31 186 views
-2

我设置了循环使“i”递增,直到“i < 10”。在for完成后,我添加了一个输出语句,在关闭括号括起来显示我的值,结果为10,而我认为最大值可能只有9. 有人可以请解释什么导致“我”去超过它的最大值9?for循环超出设置条件

非常感谢, 弗拉德

public class Recap3 { 
    public static void main(String args[]) { 
    int i; 
    for(i=0;i<10;i++) { 
     System.out.println(i); // this statement lists values from 0 to 9 
    } System.out.println(i); // this statement returns i = 10 
    } 
} 
+3

如果'i'只会上升到9,'i <10'永远不会是错误的。 – shmosel

+0

这个问题似乎有点人为,因为这不是使用'for'循环的惯用/正常方式。正常的方法是在循环内声明并初始化_loop控制变量_('i')('for(int i = 0; i <10; i ++)')。这样,'i'只在循环范围内,并且不需要知道循环后它的值是什么(因为它不存在于那里)。 –

+0

谢谢米克!将保持这一点:) – Vlad

回答

0

循环的每次迭代后,Java将执行for循环,i++的第三个任期。然后,它检查i<10。如果这导致true,它继续for循环,否则它停止。

这意味着首先,java设置我等于10,然后检查它是否小于10,然后中断。

的语句执行的是这个样子:

System.out.println(i); //i=9 
i++; //i=10 
if(!(i<10)) break;//This breaks out of the loop 
System.out.println(i); //i=10 
+0

感谢您的帮助!这非常有意义!感谢Moshe – Vlad

0

这是不是一个错误。 i增加到10是预期的行为。

每次迭代执行以下步骤之后发生:

  1. 在执行所述第三语句循环
  2. 然后评估在第二部分中的条件表达式。
  3. 如果条件表达式的计算结果为true,则执行循环体并返回第一步。如果条件表达式评估为false,则在循环后继续执行。所以

上迭代时i等于9i首先加至10,然后比较:i<10。由于i<10为false,因此循环终止。此时,i等于10

+0

!感谢你的帮助! – Vlad

0

该变量在循环的主体之前被检查并且在主体之后递增。

在循环(开始于i = 9)的最后几个迭代,会发生以下情况:

  1. 条件i<10检查。 9小于10,所以循环继续。
  2. 循环体正在运行,值9被打印到屏幕上。
  3. 变量i递增,给出值10.
  4. 检查条件i<10。 10不小于10,所以循环退出。
  5. 运行循环外的语句。 i的值是10,所以10被打印到屏幕上。
0

第二个System.out.println不在循环中。循环只能达到9。您可以使用if语句创建一个高位数,然后在循环外部使用System.out.println(高位数)。