for循环如何检查Java中的条件?

时间:2013-12-08 04:55:45

标签: java for-loop

我的问题与java在循环的“条件”中存在的打印语句时检查for循环条件的顺序有关。这似乎是一件不切实际的事情(我从来没有看到它以任何实际的方式使用过),虽然我对打印内容缺乏了解,但我认为我可能无法完全理解for循环的功能。以下问题出现在最近的一次考试中:

使用n = 5的输入打印以下方法是什么?

public static void mystery(int n) {
    for (int i = -1; i < n; System.out.print(i + " ")) {
         i++;
    }
}

正确答案是: 0 1 2 3 4 5

对我来说,似乎循环应该打印-1,然后将i递增1,打印0 .....直到i = 4.然后它将打印4,将i递增1,然后打破循环条件下的循环i&lt; ñ。 为什么正确答案是什么?为什么我的逻辑存在缺陷?

5 个答案:

答案 0 :(得分:11)

for ( <initialization> ; <test> ; <increment> ) {
     <body>
}

等同于:

<initialization>
while ( <test> ) {
    <body>
    <increment>
}

所以你有:

i = -1;
while ( i < n ) {
    i++;
    System.out.print(i + " ");
}

测试问题中的“问题”是通常放在<increment><body>部分的语句类型会被切换。

答案 1 :(得分:8)

初始化表达式发生一次。然后检查条件,然后发生循环体,然后发生增量表达式(你的print语句),然后我们重新开始。

official tutorial非常清楚,如果你仔细阅读。

如果您需要完整的详细信息,Java Language Specification entry for the for statement也可能会很有趣。

答案 2 :(得分:2)

for(initialization; Boolean_expression; update)
{
   //Body
}

以下是for循环中的控制流程:

  1. 首先执行初始化步骤,并且只执行一次。

  2. 接下来,评估布尔表达式。

  3. 如果布尔表达式为true,则执行循环体。如果为false,则循环体不执行,控制流跳转到下一个语句 for循环意味着循环结束。

  4. 执行for循环体后,控制流会跳转 备份到更新语句。这里你的print语句正在执行。

  5. 现在再次评估布尔表达式。如果是真的那么 循环执行并且过程重复自身(循环体,然后 更新步骤,然后是布尔表达式)。布尔表达式之后 如果为false,则for循环终止。

  6. 以下是步骤

    in 1st step value of i is -1 at start.
    in 2nd step i=-1 is less then n=5 so body will be executed.
    in 3rd step i will be incremented to i=0
    in 4th step value of i ( which is 0 gets printed)
    in 5th step Boolean expression is evaluated again and it returns true as i=0 is less then n=5. so again step 3 ( Body of loop) is executed.
    

答案 3 :(得分:0)

for (int i = -1; i < n; System.out.print(i + " ")) 
{
    i++;
}

首先,i初始化为-1(仅发生一次)和i < n,因此我们进入循环。 i在for循环内递增,现在i == 0。然后我们去打印声明。重复。

您想要的预期行为需要以下内容:

for (int i = -1; i < n; i++) 
{
    System.out.print(i + " ")
}

以下是for statement的参考资料。

答案 4 :(得分:0)

for循环在每次执行循环后执行增量步骤(括号内的第三部分)。如果您切换了print语句和i ++,您将获得预期的结果。