2016-03-15 155 views
-5

我有这样的代码:为什么for循环工作

int k; 
for (k=0; k>-3; k=-2;); { 
System.out.println(k); 
} 

输出为负四强。我不明白为什么这个代码仍然运行,即使在for循环中的语句之后有一个分号。

+1

你确定它是'k = -2'而不是'k- = 2'吗?第一个输出什么都没有,第二个输出负四。 – DJMcMayhem

+1

我在辩论是否downvote所有的答案,错过了... – djechlin

+1

是啊,'k = -2'会给你一个无限循环,因为'k'总是'== -2'这是'> - 3' ... –

回答

0

你的if条件后有一个;分号。因此,您的情况会立即终止,并且由{}分隔的下一个块将在100%的时间内执行。

更改此

for (k=0; k>-3; k=-2;); 

对此

for (k=0; k>-3; k=-2;) 
4

正如其他人所指出的评论中,有环路问题的顶部的几个问题。首先,第三个分号是语法错误。其次,它应该是k-=2而不是k=-2,否则循环将永不结束。

一旦这些被清除,这段代码就相当于:

int k; 
for (k=0; k>-3; k-=2); 

{ 
    System.out.println(k); 
} 

这是一样的:

int k; 
for (k=0; k>-3; k-=2); 

System.out.println(k); 

这是一样的:

int k; 
for (k=0; k>-3; k-=2) { 
} 

System.out.println(k); 

通过使用for循环之后的分号,你要求一个for循环,什么都不做。在System.out.println(k)之后的括号只是正常的括号。即使没有for循环,您也可以在自己的范围内放置任何代码。

0

循环并不实际运行。嗯,它确实,但不是代码中的循环。下面是会发生什么:

int k; 
for(k=0; k>-3; k-=2;); // <-- this line is what is repeated 
  • 循环1:K = 0,其大于-3。 Loop不做任何事情。
  • 回路2:k = -2大于-3。 Loop不做任何事情。
  • 循环3:k = -4不大于-3,因此它退出。

接下来,它打印System.out.println声明,该声明将打印k(-4)。

0

您怀疑循环体为空。它运行完成,有两个完整的迭代(0,-2)。之后,k的值是-4,所以循环退出。然后,你有一个匿名块只能执行一次,就像任何正常的语句一样。该块包含您的println,它显示循环后k的值,这是您的负四。

0

你的代码是可擦写的

int k; 
for (k=0; k>-3; k=-2;) 
{ 
// do nothing 
} 
System.out.println(k); 

,但可能你想获得somewthing这样的:{

编辑 djechlin的评论前后

int k; 
for (k=0; k>-3; k-=2) { 

    System.out.println(k); 
} 

没有;:不错赶上!

2

你的代码不会做你说的那样。真的,试试吧。你可能打算输入减号(-=)而不是等于减号(=-)。

接下来,删除for循环后面的分号。请参阅其他5个解答。

+0

太棒了!我完全错过了它:D –

+0

谢谢!这是一个错字。我正在审查一个旧的考试,所以我想知道这个问题背后的逻辑。我尝试没有半结肠。 – eckela