我有這樣的代碼:爲什麼for循環工作
int k;
for (k=0; k>-3; k=-2;); {
System.out.println(k);
}
輸出爲負四強。我不明白爲什麼這個代碼仍然運行,即使在for循環中的語句之後有一個分號。
我有這樣的代碼:爲什麼for循環工作
int k;
for (k=0; k>-3; k=-2;); {
System.out.println(k);
}
輸出爲負四強。我不明白爲什麼這個代碼仍然運行,即使在for循環中的語句之後有一個分號。
你的if條件後有一個;
分號。因此,您的情況會立即終止,並且由{
和}
分隔的下一個塊將在100%的時間內執行。
更改此
for (k=0; k>-3; k=-2;);
對此
for (k=0; k>-3; k=-2;)
正如其他人所指出的評論中,有環路問題的頂部的幾個問題。首先,第三個分號是語法錯誤。其次,它應該是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
循環,您也可以在自己的範圍內放置任何代碼。
循環並不實際運行。嗯,它確實,但不是代碼中的循環。下面是會發生什麼:
int k;
for(k=0; k>-3; k-=2;); // <-- this line is what is repeated
接下來,它打印System.out.println
聲明,該聲明將打印k
(-4)。
您懷疑循環體爲空。它運行完成,有兩個完整的迭代(0,-2)。之後,k的值是-4,所以循環退出。然後,你有一個匿名塊只能執行一次,就像任何正常的語句一樣。該塊包含您的println,它顯示循環後k的值,這是您的負四。
你的代碼是可擦寫的
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);
}
沒有;
:不錯趕上!
你的代碼不會做你說的那樣。真的,試試吧。你可能打算輸入減號(-=
)而不是等於減號(=-
)。
接下來,刪除for循環後面的分號。請參閱其他5個解答。
太棒了!我完全錯過了它:D –
謝謝!這是一個錯字。我正在審查一箇舊的考試,所以我想知道這個問題背後的邏輯。我嘗試沒有半結腸。 – eckela
你確定它是'k = -2'而不是'k- = 2'嗎?第一個輸出什麼都沒有,第二個輸出負四。 – DJMcMayhem
我在辯論是否downvote所有的答案,錯過了... – djechlin
是啊,'k = -2'會給你一個無限循環,因爲'k'總是'== -2'這是'> - 3' ... –