我的问题与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; ñ。 为什么正确答案是什么?为什么我的逻辑存在缺陷?
答案 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循环中的控制流程:
首先执行初始化步骤,并且只执行一次。
接下来,评估布尔表达式。
如果布尔表达式为true,则执行循环体。如果为false,则循环体不执行,控制流跳转到下一个语句 for循环意味着循环结束。
执行for循环体后,控制流会跳转 备份到更新语句。这里你的print语句正在执行。
现在再次评估布尔表达式。如果是真的那么 循环执行并且过程重复自身(循环体,然后 更新步骤,然后是布尔表达式)。布尔表达式之后 如果为false,则for循环终止。
以下是步骤
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 ++,您将获得预期的结果。