2011-11-26 138 views
-1

這可能看起來很傻,但我有點困惑下面的代碼:循環邏輯(JAVA)

public class Loops{ 

public static void main(String[] args) { 

    int i = 0; 
    int j = 2; 
    int k = 0; 
    boolean continue = i<j; 
    while (continue && k < 2) { 
     i++; 
     j--; 
     k++; 
    } 
    System.out.println(j); 
} 

} 

這個程序打印0,但我就是不明白爲什麼它不打印1.我看到它的方式,一個循環後i = j = 1。因此continue = false。所以如果任何人都可以向我解釋這個背後的邏輯,我將不勝感激!

+0

繼續永遠不會在環路進行了更新,你確定嗎? –

+0

該代碼無法編譯,因爲「繼續」是保留字,不能用作變量名稱。 – ibid

+0

繼續使用時要小心,它是一個用於循環的java關鍵字,如break –

回答

4

繼續在每次循環迭代後都不會重新評估自己,因爲他是在循環之外定義的。 代替,檢查循環條件我<Ĵ

while (i<j && k < 2) { 
     i++; 
     j--; 
     k++; 
    } 
+0

謝謝。我現在得到它:) – Kristian

3

你的循環會被編譯器優化爲:

boolean continue = i<j; 
while (true && k < 2) 

最後

while (k < 2) 

所以它需要循環兩次以退出

After the first loop: j == 1, k == 1 
After the second loop: j == 0, k == 2, exit now 

這是爲什麼最後j == 0

試試把條件while()內:

while (i<j && k < 2) 
+1

非常感謝!我現在明白了。 – Kristian

+0

@Kristian:你遇到了一個很好的案例來研究循環! – sll

2

繼續只設置循環體之外,這是從來沒有在循環過程進行更新。因此continue在循環開始之前設置爲真,然後再次不再修改。

+0

非常感謝! Apprecaited! – Kristian

0

你只設置變量「K」的值一次,因此也在繼續。您還需要重新評估循環內的條件表達式。

這就是說,我建議你不要使用'continue'作爲一個易變的名字;我很確定這是許多語言中的保留字。

+0

非常感謝!不勝感激! – Kristian

0

首先,你的continue變量總是計算爲true(0 < 2),所以我們可以忽略它。

第一次迭代:

  • i最終評估爲1
  • j最終評估爲1
  • k最終評估爲1
  • 作爲k < 2,我們做的另一次迭代。

第二次迭代:

  • i最終評估爲2
  • j最終評估爲0
  • k最終評估爲2
  • 作爲k == 2,我們退出循環。

然後我們打印J--其計算結果爲0。