0

0

在Java中如何实现控制台菜单功能_Java流程控制项目说明

P粉602998670

P粉602998670

发布时间:2026-02-01 16:41:02

|

797人浏览过

|

来源于php中文网

原创

控制台菜单核心是“显示→输入→执行→循环”,需用Scanner配合while(true)实现;必须统一用nextLine()读取并校验输入,避免换行符残留和异常;switch分发选项、业务逻辑抽离为方法、全面处理非法输入与边界值。

在java中如何实现控制台菜单功能_java流程控制项目说明

Scanner 读取用户输入并循环显示菜单

控制台菜单本质是「显示选项 → 等待输入 → 执行对应逻辑 → 回到菜单」的循环。核心依赖 Scanner 读取标准输入,配合 while(true) 或带退出条件的循环。别用 System.in.read(),它不跳过换行符,容易卡住;也别在循环里反复新建 Scanner 实例,会导致资源泄漏或输入流异常。

常见错误现象:输入数字后菜单闪退、按一次回车却触发两次选项、选完 3 又自动回到 1 —— 多半是 nextLine()nextInt() 混用导致换行符残留。

  • 统一用 nextLine() 读所有输入,再用 Integer.parseInt() 转数字
  • 菜单显示放在循环开头,避免首次运行漏显
  • break 退出循环,而不是 System.exit(0)(不利于单元测试和嵌入)

switch 分发菜单选项比 if-else if 更清晰

当选项超过 3 个,switch 在可读性和编译期检查上明显占优。Java 14+ 支持 switch 表达式,但控制台菜单一般用传统语句式更稳妥(兼容 JDK 8+)。注意 default 分支必须处理非法输入,否则用户输错就静默退出。

使用场景:学生管理系统、银行账户模拟、简易文件工具等需要多级交互的命令行程序。

讯飞星火
讯飞星火

科大讯飞推出的多功能AI智能助手

下载

立即学习Java免费学习笔记(深入)”;

  • 每个 case 后加 break,漏写会导致“穿透”执行下一个选项
  • 把业务逻辑单独抽成方法(如 showBalance()withdrawMoney()),别把所有代码塞进 switch
  • 输入非数字时,try-catch 捕获 NumberFormatException,并提示“请输入有效数字”

处理输入异常和边界值防止程序崩溃

真实用户会输字母、空格、负数、超长数字。不校验就直接 parseInt 必抛 NumberFormatException;不判断范围会导致数组越界或逻辑错乱(比如选了不存在的菜单项 99)。

性能影响几乎为零,但缺失它会让程序显得极不专业。

  • String.trim().isEmpty() 过滤纯空输入
  • 解析前先用正则 input.matches("\\d+") 判断是否全数字(注意不能匹配负号)
  • 转换成功后,再用 if (choice menuSize) 校验范围
  • 错误提示后不要 continue 就完事,要重新打印菜单,否则用户以为卡死了
public class ConsoleMenu {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int choice;
        while (true) {
            System.out.println("\n=== 银行系统 ===");
            System.out.println("1. 查询余额");
            System.out.println("2. 取款");
            System.out.println("3. 退出");
            System.out.print("请选择: ");

            String input = scanner.nextLine().trim();
            if (input.isEmpty()) {
                System.out.println("输入不能为空,请重试。");
                continue;
            }
            if (!input.matches("\\d+")) {
                System.out.println("请输入有效数字。");
                continue;
            }

            try {
                choice = Integer.parseInt(input);
            } catch (NumberFormatException e) {
                System.out.println("输入格式错误。");
                continue;
            }

            switch (choice) {
                case 1:
                    System.out.println("当前余额:¥12,345.67");
                    break;
                case 2:
                    System.out.println("请输入取款金额:");
                    // 这里可继续嵌套输入处理
                    break;
                case 3:
                    System.out.println("再见!");
                    scanner.close();
                    return;
                default:
                    System.out.println("无效选项,请输入 1-3。");
            }
        }
    }
}
菜单逻辑本身简单,难的是输入健壮性。很多人只测了“正常流程”,一遇到空格、回车、Ctrl+C 就崩 —— 这些恰恰是用户最常干的事。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

503

2023.08.02

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

785

2023.08.22

switch语句用法
switch语句用法

switch语句用法:1、Switch语句只能用于整数类型,枚举类型和String类型,不能用于浮点数类型和布尔类型;2、每个case语句后面必须跟着一个break语句,以防止执行其他case的代码块,没有break语句,将会继续执行下一个case的代码块;3、可以在一个case语句中匹配多个值,使用逗号分隔;4、Switch语句中的default代码块是可选的等等。

543

2023.09.21

Java switch的用法
Java switch的用法

Java中的switch语句用于根据不同的条件执行不同的代码块。想了解更多switch的相关内容,可以阅读本专题下面的文章。

424

2024.03.13

while的用法
while的用法

while的用法是“while 条件: 代码块”,条件是一个表达式,当条件为真时,执行代码块,然后再次判断条件是否为真,如果为真则继续执行代码块,直到条件为假为止。本专题为大家提供while相关的文章、下载、课程内容,供大家免费下载体验。

98

2023.09.25

java中break的作用
java中break的作用

本专题整合了java中break的用法教程,阅读专题下面的文章了解更多详细内容。

119

2025.10.15

java break和continue
java break和continue

本专题整合了java break和continue的区别相关内容,阅读专题下面的文章了解更多详细内容。

258

2025.10.24

java break和continue
java break和continue

本专题整合了java break和continue的区别相关内容,阅读专题下面的文章了解更多详细内容。

258

2025.10.24

go语言 注释编码
go语言 注释编码

本专题整合了go语言注释、注释规范等等内容,阅读专题下面的文章了解更多详细内容。

30

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 3.1万人学习

C# 教程
C# 教程

共94课时 | 8.2万人学习

Java 教程
Java 教程

共578课时 | 55.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号