-3

これは私のコードのほんの一部です。

System.out.print("Would you like to continue (Y/N)?");
while (!Anwser.equals("Y")){
    Anwser = UserInput.next();
    System.out.println("Would you like to continue (Y/N)?");
}

これが答えです。

> Would you like to continue (Y/N)? 
> Would you like to continue (Y/N)?

Y を入力して条件を満たさなかったのに、再度出力されるのはなぜですか? この後、次のコードが続きます。

4

3 に答える 3

6

whileループは 0 回以上実行されます。

ループは1do while回以上実行されます。

継続の質問では、「Y」または「y」である限り、ユーザーが何を入力したかはあまり気にしません。それ以外の場合、プログラムは終了します。また、継続質問では、通常、プログラムは一度実行したいと考えています。したがって、コードをdo whileループでラップします。

do {
// Your code goes here

    System.out.print("Would you like to continue (Y/N)?");
    Anwser = UserInput.next();
} while (answer.equalsIgnoreCase( "Y"));

コードが機能しない理由について。おそらく、ループが始まる前に Answer に値を割り当てておくべきでした。

于 2013-04-05T21:29:21.507 に答える
2

「Anwser」変数の値を変更して、ユーザーの入力に置き換えてみてください

このような:

System.out.print("Would you like to continue (Y/N)?");
Anwser = UserInput.next();
while (!Anwser.equals("Y")){
    System.out.println("Would you like to continue (Y/N)?");
    Anwser = UserInput.next();
}
于 2013-04-05T21:38:23.993 に答える
1

2回出力される理由は、最初の行がループの外で質問を出力し、次に答えをテストし(キャプチャされず、参照変数が初期化されたものに依存する)、最初に取得するwhileループに入るからです。ユーザーからの最後の質問への入力は、質問を再度出力します。

System.out.print("Would you like to continue (Y/N)?"); //prints to screen
//no input captured before test
while (!Anwser.equals("Y")){ //tests the reference variable
   Anwser = UserInput.next(); //captures user input after test
   System.out.println("Would you like to continue (Y/N)?"); //asks question again
   }

while ループはテスト前のループです。つまり、内部でコードを実行する前に条件をテストします。このコードでは、最初の質問に対する応答をテストして、2 番目の質問に回答します。そのため、while ループを維持したい場合に本当に必要なことは、質問をループ内に 1 回入れるだけです。

while (!Anwser.equalsIgnoreCase("Y"))
{    
   System.out.println("Would you like to continue (Y/N)?");
   Anwser = UserInput.next();
}

また、文字をキャプチャしているだけなので、文字リテラルを保持する String オブジェクトを作成する代わりに、char 変数を試してください。その解決策は次のとおりです。

char answer = ' ';    
Scanner userInput = new Scanner(System.in);

while (answer != 'N') // check for N to end
{           
   System.out.println("Would you like to continue (Y/N)?");
   answer = Character.toUpperCase(userInput.nextLine().charAt(0));
}
于 2013-04-06T00:24:20.160 に答える