You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java餐厅选择器程序InputMismatchException错误修复咨询

解决Java餐厅选择器的InputMismatchException问题

嘿,这个问题我太熟了!你碰到的InputMismatchException其实是个很常见的小坑,咱们来一步步拆解并修复它:

问题根源

你的程序提示用户输入yes或no,但代码里用了scnr.nextBoolean()——这个方法只认严格的true或false字符串,当用户输入yes/no时,Scanner没法把它转换成布尔值,直接就抛出异常了。

两种修复方案

方案1:简单调整输入提示(最快实现)

直接把提示文本改成让用户输入true或false,这样nextBoolean()就能正常工作,代码改动最小:

import java.util.Scanner;
public class ABaybayanAssignment3 {
    public static void main(String[]args) {
        Scanner scnr = new Scanner(System.in);
        System.out.println("Type true or false 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");
        }
    }
}

方案2:保留yes/no输入(更友好)

如果想让用户继续用yes/no输入,那就得先接收字符串,再手动转换成布尔值,还能加个输入验证防止用户瞎输:

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?");
        String vegInput = scnr.next().toLowerCase();
        while (!vegInput.equals("yes") && !vegInput.equals("no")) {
            System.out.println("Invalid input, please type yes or no:");
            vegInput = scnr.next().toLowerCase();
        }
        boolean vegetarian = vegInput.equals("yes");
        
        // 处理纯素食者问题
        System.out.println("Is anyone in your party vegan?");
        String veganInput = scnr.next().toLowerCase();
        while (!veganInput.equals("yes") && !veganInput.equals("no")) {
            System.out.println("Invalid input, please type yes or no:");
            veganInput = scnr.next().toLowerCase();
        }
        boolean vegan = veganInput.equals("yes");
        
        // 处理无麸质问题
        System.out.println("Is anyone in your party gluten free?");
        String gfInput = scnr.next().toLowerCase();
        while (!gfInput.equals("yes") && !gfInput.equals("no")) {
            System.out.println("Invalid input, please type yes or no:");
            gfInput = scnr.next().toLowerCase();
        }
        boolean glutenFree = gfInput.equals("yes");
        
        // 输出餐厅推荐
        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");
        }
    }
}

额外小建议

  • 变量名遵循Java的驼峰命名法:把你原来的Vegetarian改成vegetarian,这是行业通用的编码规范,可读性更强。
  • 要是觉得重复的输入验证代码太啰嗦,可以把它封装成一个单独的方法,比如private static boolean getYesNoAnswer(Scanner scnr, String question),这样代码会更整洁。

内容的提问来源于stack exchange,提问作者short_string

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 08:37:38