2017-06-09 15 views
-1

do whileループでユーザー入力をしようとしました。ユーザーの入力が「はい」または「いいえ」でなければ、ループは続行する必要があります。 は私が書くとき:ユーザー入力とdo whileループwith否定

BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); 
    String userInput = ""; 
    String yes = "yes"; 
    String no = "no"; 

    do { 
     System.out.print("Type yes or no: "); 
     userInput = input.readLine(); 
    } while (userInput.equals(yes) || userInput.equals(no)); 

ユーザータイプの場合は、「はい」または「いいえ」のループは、他のすべての入力は、ループの終わりになり、継続します。

私が書くとき:

while (!userInput.equals(yes) || !userInput.equals(no)); 

ループは関係なく、ユーザが入力するものを、毎回続けています。

私がAND演算子を使用している場合にのみ動作します。

while (!userInput.equals(yes) && !userInput.equals(no)); 

なぜそうですか? 私は、ユーザーがyesまたはnoを入力するとループを停止したと言っているので、OR演算子ではないはずです。

+0

*「ユーザーがはいを入力した場合、またはループしないようにする」と言いたいのですが、どうしてそれらをプログラムしないのですか?ユーザーが「はい」と入力した場合は、「いいえ」と表示され、ループが繰り返されます。ここで問題となるのは、 'do/while'ループと基本ブール代数の基本概念です。それについていくつかの研究を行い、あなた自身でその質問に答えることができます。 – Tom

+0

あなたは最後の条件が効いている理由と、そうでない理由の両方を 'はい/いいえ'と入力しなかったことを確認してください。 – eg04lt3r

+0

ありがとうございました。それは私の質問に答えます。あなたはすべて素晴らしいです! –

答えて

1
!userInput.equals(yes) || !userInput.equals(no) 

「hello」と入力したとします。あなたTHSは

true 

はのは、ユーザが "はい" と入力してみましょうです

true || true 

ある

!false || !false 

を持っています。

あなたはこれのユーザーが "いいえ" に入りましょう

true 

ある

false || true 

ある

!true || !false 

を持っています。

あなたは、このように持っているので、ユーザーが入力しwhetever、条件が常に真であり、したがって、ことがわかり

true 

ある

true || false 

ある

!false || !true 

ループは永遠に続く。

1

あなたが書いているブール式について考えてみましょう。ユーザが「はい」を入力すると、と評価され、これはfalse||trueと等価であり、それはtrueです。条件が満たされているので、ループは継続します。

0

これはブール式の表現方法です。 Aの反対側|| Bはそうではありません!A || !Bだが!(A || B)と同じ!A & &!B。

0

if(A || B)は、A trueまたはB trueのいずれかを意味します。もしAが真であればBをチェックしません。それはブロックの中に直接入ります。したがって、if(!yes || !no)と言ったら、yesと入力すると2番目の条件が真になり、noを入力すると最初の条件が真になり、実行を続けます。そしてabdcと入力すれば再び真です。

関連する問題