2017-08-09 8 views
-4

私のコードが動作しない理由を理解できません。Java:if文と等しくない文がプログラムを破る

「はい」または「いいえ」と等しくない場合は、周囲を壊しているようです。ここで

は私のコードです:

public static void main(String[] args) { 
    // TODO code application logic here 

    Scanner user_input = new Scanner(System.in); 

    String name; 
    System.out.println("Hello, what is your name?"); 
    name = user_input.next(); 

    System.out.println(""); 

    String name_answer; 
    System.out.println("Your name is " + name + ". Is this correct? (yes/no)"); 
    name_answer = user_input.next(); 

    System.out.println(""); 

    if (!name_answer.equals("yes" + "no")) { 
     System.out.println("Answer not valid. Please input again."); 
     name_answer = user_input.next(); 
     while (!name_answer.equals("yes" + "no")) { 
      System.out.println("Answer not valid. Please input again."); 
      name_answer = user_input.next(); } } 

    if (name_answer.equals("yes")) { 
     System.out.println("Thank you, " + name + ". Please proceed to the next question."); 
    } else if (name_answer.equals("no")) { 
     System.out.println("Please reinput your name correctly."); 
     while (name_answer.equals("no")) { 
      String name_again; 
      System.out.println(""); 
      System.out.println("What is your correct name?"); 
      name_again = user_input.next(); 

      System.out.println(""); 

      System.out.println("Your name is " + name_again + ". Is this correct? (yes/no)"); 
      name_answer = user_input.next(); } 

私は(下に表示)のコードの-等しいないブロックをコメントアウトした場合、プログラムは動作します。しかし、ブロックのコードでは、プログラムが壊れます。

if (!name_answer.equals("yes" + "no")) { 
     System.out.println("Answer not valid. Please input again."); 
     name_answer = user_input.next(); 
     while (!name_answer.equals("yes" + "no")) { 
      System.out.println("Answer not valid. Please input again."); 
      name_answer = user_input.next(); } } 

私の目標は、「はい」または「いいえ」の別のステップへのプログラムをもたらしながら、「はい」または「いいえ」reinputtedすることに等しくないすべての答えを持っていることです。助けてくれてありがとう。

+6

あなたは '「はい」+「ノー」'手段どう思いますか? 「休憩」はどういう意味ですか? – shmosel

+0

本質的に、あなたのコードが** if **および** while **ループ条件を確認するために何を求めているかは、*** name_answer ***という文字列変数が "yesno"と等しくない場合です。私はこれがあなたの意図だとは思わない。 [論理AND](https://www.javatpoint.com/operators-in-java)演算子を読んでください。[String.equalsIgnoreCase()](https://www.tutorialspoint .com/java/java_string_equalsignorecase.htm)メソッド。 – DevilsHnd

+0

誰かが「いいえ」と入力して、次に尋ねるときに気をつけて入力するとどうなりますか? whileループの最初の繰り返しをハードコード化したのはなぜですか? – Dukeling

答えて

2

コードの技術的な問題は、論理演算子の代わりに連結を使用していることです。 "yes" + "no""yesno"と評価されますが、おそらく入力文字列と一致することはありません。

さらに根本的に、問題は2つのブール評価を1つにまとめようとしていることです。論理的には、回答が「はい」でない場合は進みます。答えが「いいえ」ではありません。

if (!name_answer.equals("yes") && !name_answer.equals("no")) { 

一度に複数の値をテストしたい場合は、このショートカットを使用することができます:Java構文で

if (!Arrays.asList("yes", "no", "foo", "bar").contains(name_answer)) { 
+1

コードの全体の流れは私が再訪したと思います –

関連する問題