在While循环中使用时,扫描仪输入不起作用

时间:2018-12-29 08:36:32

标签: java

我正在尝试创建一种方法来验证用户输入为“ 1”。因此,我使用了while循环进行验证。但是,当输入为“ 1”时,它将进入while循环。

public static int switchInput() {

    System.out.print("\n" + "Enter your selection: ");

    Scanner userInput = new Scanner(System.in);
    String selection = userInput.next();

    while (selection != "1" /*&& selection != "2" && selection != "3"*/){

        System.out.println("Enter 1: ");
        //System.out.println("Please enter either '1','2' or '3': ");
        selection = userInput.next();

    }

    int result = Integer.parseInt(selection);
    return result;
}

输出:

What would you like?
1: Regular Hamburger
2: Healthy Burger
3: Deluxe Burger

Enter your selection: 
1
Enter 1: 
1
Enter 1: 
1
Enter 1: 

Process finished with exit code -1

2 个答案:

答案 0 :(得分:1)

selection != "1"是错误的。 !=检查参考不等式,即,如果两边的对象都不相同,则条件将返回true

在您的情况下,selection和值为1的String对象是不同的对象,这就是为什么条件返回true的原因。

使用!selection.equals("1")

编辑:

根据Igor Nikolaev的建议,如果不强制使用String对象作为选择,则可以使用int selection = userInput.nextInt()将选择作为int。在这种情况下,您可以使用selection == 1

答案 1 :(得分:0)

您看到,变量'selection'是一个字符串,并且使用!=比较两个字符串是不正确的。 而是使用方法equals() 因此,我看到您想比较字符串选择和字符串“ 1”是否将if条件替换为:

while(!selection.equals("1")){

提示:您希望用户输入数字,那么为什么要选择字符串?如果它是整数,那会更好。