2017-04-21 36 views
1

所以我有這個簡單的布爾方法來檢查我的遊戲是否已經結束。在主要方法中,我有一個大的循環,以語句while (isGameEnd() == false) {...}開頭。即使方法中的一個,兩個或所有條件變爲真,該循環也不會中斷。我不明白。即使當其中一個條件爲真時,這個布爾值爲什麼會出現錯誤?

public static boolean isGameEnd() { 
     if (lives == 0 || steps == 0 || isMazeCompleted()) { return true; } 
     else { return false; } 
} 
+5

使用調試器,但沒有一個條件是「真」。另外,你的發佈代碼相當於'return lives == 0 ||步驟== 0 || isMazeCompleted();' –

+1

你可以在主要方法中顯示代碼嗎? –

+0

真的不應該評論縮進風格,所以我不會 – Tibrogargan

回答

1

在函數定義中使用static對我來說是一個紅旗。如果一個類與默認字段值定義,那麼這些默認值會是怎樣被選中,而不是具體的實現類:

class Game { 
    int lives = 3; 
    int steps = 10; 
    public boolean isMazeCompleted() { 
    return false; 
    } 
    public void doStuff() { 
    lives--; 
    } 
    public static boolean isGameEnd() { 
    if (lives == 0 || steps == 0 || isMazeCompleted()) { 
     return true; 
    } else { 
     return false; 
    } 
    } 
} 

public static void main(String[] args){ 
    Game a; 
    while(!a.isGameEnd()){ // check 'isGameEnd' for the static class 
    a.doStuff(); // This does *not* update the static class 
    } 
} 

大多數Java編輯器會抱怨在非使用靜態函數靜態的上下文,所以會建議Game.isGameEnd()而不是a.isGameEnd(),這使得程序員對錯誤更加明顯。

相關問題