如何解决Java程序中do-while循环菜单重复打印两次的问题
问题修复方案
核心原因
你遇到的菜单重复打印、默认分支异常触发问题是Java Scanner类混用读取方法导致的换行符残留问题:
- 搜索分支中使用的
input.next()只会读取输入中第一个空白字符前的内容,不会消耗输入末尾的换行符 - 回到循环开头调用
input.nextLine()时,会直接读取到遗留的换行符得到空字符串,匹配不到任何分支就进入default逻辑,因此会重复打印菜单并提示未知操作。
修复方法
方案1:主动消耗遗留换行符
在input.next()执行后新增一行input.nextLine(),吃掉剩余的换行符即可:
case "search for an order": System.out.println("请输入要搜索的产品名:"); String search = input.next(); input.nextLine(); // 新增行,处理next()遗留的换行 boolean found = false; // 原有逻辑保持不变
方案2:统一使用nextLine()读取所有输入(更推荐)
将读取产品名的input.next()改为input.nextLine(),统一读取逻辑,同时还支持带空格的产品名输入:
case "search for an order": System.out.println("请输入要搜索的产品名:"); String search = input.nextLine(); // 改用nextLine()读取整行 boolean found = false; // 原有逻辑保持不变
额外注意
不要将Scanner的创建和关闭逻辑移到循环内:Scanner关闭时会连带关闭底层的System.in输入流,一旦关闭后续循环无法再读取任何输入,保持原本在循环外创建、循环结束后关闭的写法即可。
内容的提问来源于stack exchange,提问作者Mr. Goose
相关产品推荐
相关产品推荐

