2016-03-15 180 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