2017-04-21 13 views
1

私はゲームが終了したかどうかをチェックするためのこの単純なブール値のメソッドを持っています。メインの方法では、私はステートメントwhile (isGameEnd() == false) {...}で始まる大きなループを持っています。このループは、メソッドの条件のうちの1つ、2つ、またはすべてが真になっても、決して破られないようです。理解できません。条件の1つが真であっても、このブール値が偽になるのはなぜですか?

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エディタが非で静的関数の使用について文句を言うだろう:クラスは、デフォルトのフィールド値で定義されている場合、これらのデフォルト値は、クラスの特定の実装ではなく、確認されているものになります静的コンテキストの場合はa.isGameEnd()の代わりにGame.isGameEnd()が提案されます。これにより、エラーが発生しているプログラマーにはもう少し明らかになります。

関連する問題