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

Java通讯录项目中Switch分支字符串输入异常求助

搞定你的Java通讯录输入问题!

嘿,这个Scanner的坑我踩过好多次了!你遇到的问题根本不是case分支的问题,而是输入缓冲区里残留的换行符在搞鬼。

问题到底出在哪?

当你用scan.nextInt()获取用户选择的数字时,它只会读取输入的整数部分,而你按下回车产生的\n(换行符)会乖乖留在输入缓冲区里。等你走到case 1或case 3,调用scan.nextLine()想读姓名的时候,nextLine()会直接把这个残留的换行符当成输入内容读走——相当于读了个空字符串,所以看起来就是“没法输入内容”,其实程序已经“读完”了。

两种快速解决办法

办法1:读完整数后手动清空缓冲区

就在scan.nextInt()之后加一行scan.nextLine(),把残留的换行符吃掉就行:

int choice = scan.nextInt();
scan.nextLine(); // 关键!清空缓冲区里的换行符
switch(choice){
    case 1:
        System.out.print("请输入要添加的姓名:");
        String name = scan.nextLine();
        // 你的姓名处理逻辑
        break;
    case 2:
        // 输入号码的逻辑(原本正常的部分)
        int phone = scan.nextInt();
        break;
    case 3:
        System.out.print("请输入要查询的姓名:");
        String searchName = scan.nextLine();
        // 你的查询逻辑
        break;
    // 其他case分支...
}

办法2:全程用nextLine()读取,再转成整数

如果不想每次都处理缓冲区,干脆统一用nextLine()读所有输入,把选择的字符串转成整数就行,这种方式更不容易踩坑:

System.out.print("请输入你的选择:");
String choiceStr = scan.nextLine();
int choice = Integer.parseInt(choiceStr); // 把字符串转成整数
switch(choice){
    case 1:
        System.out.print("请输入要添加的姓名:");
        String name = scan.nextLine();
        // 处理逻辑
        break;
    // 其他case...
}

小提醒

以后用Scanner的时候要记住:nextInt()、nextFloat()这类方法只读取对应类型的数据,不会处理换行符;而nextLine()会读取从当前位置到换行符的所有内容,包括空内容。混合使用的时候一定要注意缓冲区的状态哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:39:47