有 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.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");
        }
    }
}

共 (3) 个答案

  1. # 1 楼答案

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

    这样的事情应该有助于传达我的意思:

    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;
        }
    }
    
  2. # 2 楼答案

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

    程序的问题是在运行时将yesno赋值给布尔变量VegetarianveganglutenFree,这是错误的

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

    此外,改变

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

    System.out.println("Type true or false for the following questions:");
    
  3. # 3 楼答案

    我有一个解决方案。我使用了Boolean并使用了true/false而不是yes/no。两者在逻辑上是相同的。这是我的节目

    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输入。所以我希望这能回答你的问题