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

如何解决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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 09:06:05