扫描仪在if语句中无法正常工作

yhs*_*dsd 0 java if-statement java.util.scanner

此代码提示用户通过键入Y或N(是/否)来确认预订.如果他们输入y或Y,它会调用一个方法setBooked(),该方法基本上只是将boolean变量"预订"设置为"真".在isBooked()刚刚返回boolean值,所以我可以之前测试/后,看它是否实际工作.

实际的代码确实没有像我预期的那样工作,如果你键入"y"它会立即正常工作但是如果你输入任何其他东西它会再次提示你,如果你键入"y"再次工作但是这次你键入任何东西否则它会停止并转移到下一个"客户"(方法被称为约8次)

所以基本上有一个原因是它提示用户两次而不是仅仅评估他们第一次输入"y"或"Y"的内容?

System.out.println(customer.isBooked());
System.out.println( "Confirm booking for " + customer.getName() + "(Y/N)");
Scanner scan = new Scanner(System.in);

if (scan.nextLine().equals("y") || scan.nextLine().equals("Y"))
    customer.setBooked();

System.out.println("Booked");
System.out.println(customer.isBooked());
Run Code Online (Sandbox Code Playgroud)

Cod*_*roc 5

你应该用 #equalsIgnoreCase

scan.nextLine().equalsIgnoreCase("y")相反,请使用,||并检查两个条件,因为您将被提示nextLine()两次.

如果您希望用户在输入错误输入时继续询问输入,则应使用循环和提示,直到条件得到满足为止.

例如

     do {
         System.out.println("Type 'y' OR 'Y' to Exit!");
         if(s.nextLine().equalsIgnoreCase("y")) {
            customer.setBooked();
            break;
         }
      } while(true);
Run Code Online (Sandbox Code Playgroud)

  • 啊.`equalsIgnoreCase()`*该死的*~~:P (3认同)