2017-08-09 24 views
-4

我找不出为什么我的代码不工作。Java:如果语句不等于打破程序

它似乎是突破如果不等于是或否的区域。

这里是我的代码:

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

从本质上讲,你的代码要求你的**如果**和** while循环条件检查是:如果字符串变量名称*** name_answer ***不等于“yesno”。我不相信这是你的意图。阅读[Logical 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",这可能永远不会与您的输入字符串匹配。

更重要的是,问题在于您试图将两个布尔值评估绑定为一个。从逻辑上说,如果答案不是“是”,您想继续。答案不是“否”。在Java语法:

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

如果你想同时测试多个值,可以使用此快捷方式:

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

代码的整个流程可以通过重新访问我认为 –