2016-10-27 11 views
-2

私はJavaプログラムを開発中です。今はすべてが完全に機能しており、すべての機能がそこにあります。しかし、私が立ち往生している部分は、ループからdo-whileループでプログラムを終了する方法です。私は構文が間違っているはずです。終了プログラムdo-whileループin java

基本的には、ユーザの入力に反応するスイッチdoneを設定します。今、それは働いていて、プログラムをループしますが、私が「いいえ」と答えると終了しません。ここで

は、これが起こっているコードの一部です:

public void main() { 
    String userInput; 
    boolean done = true; 
    Scanner keyboard = new Scanner(System.in); 
    do { 
     System.out.println("Welcome to Hangman!"); 
     System.out.println("Do you want to play?"); 
     userInput = keyboard.next(); 
     if (userInput.equals("Yes") || userInput.equals("yes") || userInput.equals("y") || userInput.equals("Y")) { 
      done = false; 
     } else if (userInput.equals("n") || userInput.equals("no") || userInput.equals("NO") || userInput.equals("No")) { 
      done = true; 
     } 
     while (!done) { 
      System.out.println(getDisguisedWord()); 
      System.out.println("Guess a letter: "); 
      String guess = keyboard.next(); 
      makeGuess(guess); 
      if (gameOver()) { 
       String ui; 
       System.out.println("Do you want to play again?"); 
       ui = keyboard.next(); 
       if (ui.equals("Yes") || ui.equals("yes") || ui.equals("y") || ui.equals("Y")) { 
        done = false; 
       } else { 
        done = true; 
       } 
      } 
     } 
    } while(done); 
} 

私はこれよりよく処理できる方法上の任意のヒント?

+4

Javaで '=='を使用して文字列を比較することはできません。.equals()メソッドを使用する必要があります。 –

+0

'while(done == false)'を 'while(done)'と置き換える必要はありません –

+0

[Javaの文字列を比較するにはどうすればいいですか?](http://stackoverflow.com/questions)/513832/how-do-i-compare-strings-in-java) – John3136

答えて

1

あなたの問題はあなたの考えではありません。 Stringを比較するには、内蔵のequals()メソッド(ui.equals("Y"))を使用する必要があります。 ==を使用してそれらを比較すると、常にfalseが返されます。詳細については、How do I compare strings in Java?を参照してください。

また、お客様のdone = truedone = false文をフリップする必要があります(ユーザーが再生を再試行する場合は、まだ完了していません)。

最後に、keyboard.nextLine()コールをkeyboard.next()コールに変更することをお勧めします。そうしないと、特にユーザーが空白を含む入力を入力すると奇妙な問題が発生する可能性があります。

編集:もう少し問題があります。あなたはwhileのループで、while(done)の代わりにwhile(!done)になるはずです。また、whileループで既にユーザーが何度でも何回も再生できるようになっているので、私はあなたのdo-whileループを取り除くことになるので、不要です。

+0

答えに感謝します!私はあなたの提案に基づいてそれを更新しました。しかし、これは私を終了させず、 'do'ブロックの先頭の' System.out.println( "Welcome to Hangman!");行にループを戻し続けます。どのようにループとプログラムを終了するためのヒント? –

+0

@JamesNあなたは 'done = true'と' done = false'を反転しましたか?あなたの質問では、 '=='を '.equals()'に変更しましたが、それらを修正しませんでした。 – mapeters

+0

はい私はしました。私は編集を再調整した。私はまだ同じ問題があります –

-1

statmentの文字列値を比較するために、equalsメソッドを使用する必要があります。 ui.equals( "はい")。

関連する問題