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

时间:2014-08-06 06:48:16

标签: java if-statement java.util.scanner

此代码提示用户通过键入Y或N确认预订(是/否)。如果他们输入y或Y,则会调用方法setBooked(),该方法基本上只设置boolean变量"预订" to" true"。 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());

6 个答案:

答案 0 :(得分: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);

答案 1 :(得分:4)

提示两次,因为您要求提示两次

此处:if (scan.nextLine().equals("y") || scan.nextLine().equals("Y")) 您正在拨打scan.nextLine()两次。

将您的代码更改为:

String s = scan.nextLine();
s=s.toLowerCase(); // change "Y" to "y" . Cleaner code.

if(s.equals("y")){
//your code here
}

答案 2 :(得分:1)

尝试使用以下代码:

System.out.println(customer.isBooked());
System.out.println( "Confirm booking for " + customer.getName() + "(Y/N)");
Scanner scan = new Scanner(System.in);
boolean flag = scan.nextLine().equalsIgnoreCase("y");
if (flag)
    customer.setBooked();
System.out.println("Booked");
System.out.println(customer.isBooked());

答案 3 :(得分:0)

您使用OR在条件中调用scan.nextLine()两次。这意味着如果左侧不是真的,那么它将继续向右侧。但是如果确实如此,则OR将为真,不需要评估右侧。这就是为什么当他们第一次进入y时它只要求一次,但否则它要求两次。

如果你只想要它一次,那么不要这样做,而是将scan.nextLine()的值赋给变量,并在if语句中使用该变量。

String result = scan.nextLine();
if (result.equals("y") || result.equals("Y")) {
    ...
}

答案 4 :(得分:0)

是的,你打两次电话

 scan.nextLine().equals("y") || scan.nextLine().equals("Y") //2 scan.nextLine()

将您的代码更改为

 String line=scan.nextLine();
 if ("y".equals(line) ||"Y".equals(line)) // avoid NullPointerException too

或使用equalsIgnoreCase()

 if("y".equalsIgnoreCase(scan.nextLine())) // avoid NullPointerException too 

答案 5 :(得分:0)

你说它应该在这里提示两次:

if (scan.nextLine().equals("y") || scan.nextLine().equals("Y"))

两次致电scan.nextLine()

您可以做的是:

...
String next = scan.nextLine();    

if (next.equals("y") || next.equals("Y"))
...