为什么在“while”语句末尾使用分号与在“for”语句末尾使用分号时输出不同? [重复]

问题描述 投票:0回答:2

在回顾

while
for
循环时,我遇到了几个循环,它们会迭代一个变量,
i
,然后打印它。我知道分号给
while
循环一个空体,但它在
for
循环中是否同样有效?

例如,如果我在这个循环中的

for
语句后使用分号:

int i = 0;

for (i = 0; i < 10; i++);
  System.out.println(i + 4);

然后程序输出:

14

但是,当在这个循环中

while
语句后使用分号时:

int i = 0;
while (i < 10);
  i++;
  System.out.println(i + 4);

什么都没有打印。

为什么会这样?我假设分号结束了循环,但我可能误解了它们是如何工作的,并且由于

i
是在循环外声明和实例化的,所以范围不应该有任何问题。

java loops for-loop while-loop
2个回答
0
投票

在代码中

while (i < 10);
i++;

i++;
语句是不在循环内,正是因为上一行的分号结束了循环。

由于循环内没有代码,所以没有什么可以改变

i
的值;因此,
i < 10
不能阻止为真;因此,循环无法结束;因此,代码没有到达
i++
行(或随后尝试显示输出)。

另一方面,代码

for (i = 0; i < 10; i++);

大致相当于

i = 0;
while (i < 10) {
    i++;
}

i++
发生在
for
循环体内的代码之后(即使 循环体使用
continue
跳到下一次迭代)。在这里,
for
循环体内没有代码,但是
i++
仍然在“无”之后发生。因此,
i
每次循环都会增加;最终
i
不再是
< 10
(具体来说,等于10);剩下的代码继续进行。


0
投票

在第一种情况下,如您所说,for 循环体为空,因此它一直执行到

i
等于
10
为止。到那时它结束,打印 10 + 4 的结果。

在第二种情况下,没有打印任何东西,因为 while 末尾的

;
使它成为一个无限循环:你基本上是在说:“直到
i
< 10, do nothing". Since
i = 0
,你永远不会退出那个循环,永远不会到达打印语句。

© www.soinside.com 2019 - 2024. All rights reserved.