Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我应该如何处理无效的用户输入?_Java - Fatal编程技术网

Java 我应该如何处理无效的用户输入?

Java 我应该如何处理无效的用户输入?,java,Java,对于我的餐馆选择器程序,我需要编写一个使用决策结构的程序。注意:在编译和运行它时,我遇到了一些错误,例如: Exception in thread "main" java.util.InputMismatchException at java.base/java.util.Scanner.throwFor(Scanner.java:939) at java.base/java.util.Scanner.next(Scanner.java:1594) at java

对于我的餐馆选择器程序,我需要编写一个使用决策结构的程序。注意:在编译和运行它时,我遇到了一些错误,例如:

Exception in thread "main" java.util.InputMismatchException
  at java.base/java.util.Scanner.throwFor(Scanner.java:939)
  at java.base/java.util.Scanner.next(Scanner.java:1594)
  at java.base/java.util.Scanner.nextBoolean(Scanner.java:1893)
  at ABaybayanAssignment3.main(ABaybayanAssignment3.java:12)
我想知道我能对我的代码做些什么来修复它。我的代码可以在下面找到

import java.util.Scanner;

public class ABaybayanAssignment3 {
    public static void main(String[]args) {
        
    Scanner scnr = new Scanner(System.in);
        
    
        System.out.println("Type yes or no for the following questions:");
        
        System.out.println("Is anyone in your party vegetarian?");
        boolean Vegetarian = scnr.nextBoolean();
        
        System.out.println("Is anyone in your party vegan?");
        boolean vegan = scnr.nextBoolean();
        
        System.out.println("Is anyone in your party gluten free?");
        boolean glutenFree = scnr.nextBoolean();
        
        System.out.println("Here are your restaurant choices:");
        
        if(Vegetarian || vegan || glutenFree ) {
            System.out.println("Corner Cafe");
        }
        if(!Vegetarian && !vegan && !glutenFree) {
            System.out.println("Joe's Gourmet Burgers");
        }
        if(!vegan) {
            System.out.println("Main Street Pizza Company");
        }
        if(!vegan && !glutenFree) {
            System.out.println("Mama's Fine Italian");
        }
    }
}

程序编译和运行时没有任何错误

程序的问题是,在运行时将
yes
no
分配给布尔变量
vegean
vegan
glunfree
,这是错误的

<强>也不同于C++,java中的布尔值不能赋给< < />强> ->仅<强>真< <强> >或<强> false <强> >

此外,改变

System.out.println("Type yes or no for the following questions:");


我认为主要的问题是您不能处理无效的输入错误。最好捕获这些异常并提示用户输入有效的输入。或者,您还可以添加一个默认值,在用户未输入任何内容的情况下,将布尔值设置为该值(当然,在程序开始时指定该值)

类似这样的内容应该有助于传达我的意思:

public class ABaybayanAssignment3 {

    public static void main(String[] args) {

        Scanner scnr = new Scanner(System.in);

        System.out.println("Type yes or no for the following questions:");

        boolean Vegetarian = requestBooleanInput(scnr,"Is anyone in your party vegetarian?" );
        boolean vegan = requestBooleanInput(scnr,"Is anyone in your party vegan?");
        boolean glutenFree = requestBooleanInput(scnr,"Is anyone in your party gluten free?");

        System.out.println("Here are your restaurant choices:");

        if (Vegetarian || vegan || glutenFree) {
            System.out.println("Corner Cafe");
        }
        if (!Vegetarian && !vegan && !glutenFree) {
            System.out.println("Joe's Gourmet Burgers");
        }
        if (!vegan) {
            System.out.println("Main Street Pizza Company");
        }
        if (!vegan && !glutenFree) {
            System.out.println("Mama's Fine Italian");
        }
    }

    public static boolean requestBooleanInput(Scanner scanner, String message){
        boolean value = false;
        boolean validInput = false;
        while (!validInput){
            System.out.println(message);
            try {
                value = scanner.nextBoolean();
                validInput = true;
            } catch (Exception e) {
                System.out.println("You entered an invalid input '"+scanner.next()+"', please enter only 'true' or 'false'");
            }
        }
        return value;
    }
}

我对你的计划有一个解决方案。我使用了布尔值
真/假
而不是
是/否
。两者在逻辑上是相同的。这是我的节目

public class testing {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);


        System.out.println("Type true or false for the following questions:");

        System.out.println("Is anyone in your party vegetarian?\n");
        boolean Vegetarian = sc.nextBoolean();

        System.out.println("Is anyone in your party vegan?\n");
        boolean vegan = sc.nextBoolean();

        System.out.println("Is anyone in your party gluten free?\n");
        boolean glutenFree = sc.nextBoolean();

        System.out.println("Here are your restaurant choices:");

        if(Vegetarian == true && vegan == true && glutenFree == true) {
            System.out.println("Corner Cafe");
        } else if(Vegetarian == false && vegan == false && glutenFree == false) {
            System.out.println("Joe's Gourmet Burgers");
        } else if(vegan == false) {
            System.out.println("Main Street Pizza Company");
        } else if(vegan == false && glutenFree == false) {
            System.out.println("Mama's Fine Italian");
        }

    }

}
我的输出显示了这一点

Type true or false for the following questions:
Is anyone in your party vegetarian?

true
Is anyone in your party vegan?

true
Is anyone in your party gluten free?

true
Here are your restaurant choices:
Corner Cafe

我已经改变了一点程序,当然是为了让它更容易。由于使用了Boolean,因此唯一的选项是true或false。除此之外,if-else验证也被修改为abit,以补充
true/false
输入。因此,我希望这能回答您的问题

->InputMismatchException-如果调用
.nextBoolean()
(堆栈跟踪中指示的一个)时,下一个标记不是有效的布尔值,那么其中有一些值不是字符串“true”或“false”。停止输入非布尔值:)调用
scnr.nextBoolean()
时,下一步键入的内容必须是单词“true”或单词“false”(大写不重要)-nextBoolean()不接受单词“Yes”或“No”。尽管有最新的答案建议,但它向您展示了如何使程序使用布尔值,询问您的问题并期望某人键入
true
false
将是一种糟糕的用户体验。当与用户交互(而不是从文件中读取)时,通常需要使用
scanner.nextLine()
获取字符串,然后对其进行解释<代码>字符串响应=scnr.nextLine();if(response.equalsIgnoreCase(“yes”)| | response.equalsIgnoreCase(“y”){…}
Type true or false for the following questions:
Is anyone in your party vegetarian?

true
Is anyone in your party vegan?

true
Is anyone in your party gluten free?

true
Here are your restaurant choices:
Corner Cafe