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

为何do-while循环中switch仅输出default语句?代码问题排查

Java菜单程序输入异常问题分析与解决

错误原因

  • 换行符未被处理:System.in.read()每次仅读取单个字节,当你输入选项后按回车,输入流中会包含选项字符+换行符(Windows下是\r\n,类Unix系统是\n)。第一次读取到有效选项后,下一次循环会读取到换行符,这个字符不在switch的case范围内,因此触发default分支输出"Invalid Input"。
  • 缺少'q'的分支处理:代码的switch语句没有为退出指令'q'设置对应分支,输入'q'时会直接进入default输出错误提示,之后才会退出do-while循环。

修正方案

针对上述两个问题,我们需要:清空输入流中的残留换行符,同时为'q'添加专属处理分支。

修正后的完整代码

import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        char choice;

        System.out.println("Menu ");
        System.out.println("1. Nasi Lemak ");
        System.out.println("2. Teh Tarik ");
        System.out.println("3. Roti ");
        System.out.println(" ");

        System.out.println("Place order or type 'q' to exit.");

        do {
            System.out.print("Add menu: ");
            choice = (char) System.in.read();

            // 清空输入流中剩余的换行符等残留字符
            while (System.in.available() > 0) {
                System.in.read();
            }

            switch (choice) {
                case '1':
                    System.out.println("Nasi Lemak is added to order");
                    break;
                case '2':
                    System.out.println("Teh Tarik is added to order");
                    break;
                case '3':
                    System.out.println("Roti is added to order");
                    break;
                case 'q':
                    // 退出操作,无额外输出
                    break;
                default:
                    System.out.println("Invalid Input");
            }
        } while (choice != 'q');
        System.out.println("Thank you for your order.");
    }
}

关键改动说明

  1. 清空输入流:通过System.in.available()判断输入流中是否有未读取的字节,循环读取直到清空,避免残留的换行符被当作下一次输入。
  2. 添加case 'q':单独处理退出选项,这样输入'q'时不会触发default分支的错误提示,直接进入循环退出逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 22:10:47