在Java里如何制作菜单驱动程序

来源:站长联盟作者:缓存小熊猫头衔:程序员
导读:本期聚焦于小伙伴创作的《在Java里如何制作菜单驱动程序》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《在Java里如何制作菜单驱动程序》有用,将其分享出去将是对创作者最好的鼓励。

菜单驱动程序是Java控制台应用中常见的交互形式,核心逻辑是通过循环持续展示可选菜单,接收用户的选择后执行对应的功能模块,直到用户选择退出选项才终止程序运行。这类程序主要依赖Java的输入输出、条件判断和循环控制语法实现。

在Java里如何制作菜单驱动程序

核心实现思路

制作Java菜单驱动程序的整体流程可以分为四个部分:

  • 初始化程序所需的资源,比如创建输入流对象用于接收用户输入
  • 使用循环结构持续展示菜单选项,保证用户每次操作后能重新看到菜单
  • 接收用户的选择,通过条件判断语法匹配对应的功能逻辑
  • 提供退出选项,当用户选择退出时跳出循环,结束程序运行

所需基础语法

实现这类程序需要用到以下几个Java基础知识点:

  • Scanner类:用于接收控制台的用户输入,需要导入java.util.Scanner
  • whiledo-while循环:保证菜单可以重复展示,直到用户选择退出
  • switch-case语句或if-else判断:根据用户选择匹配对应的功能分支
  • 基本的输出语句System.out.println:用于展示菜单内容和功能执行结果

完整示例代码

下面是一个简单的图书管理菜单驱动程序示例,包含添加图书、查询图书、退出三个功能:

import java.util.Scanner;
import java.util.ArrayList;
import java.util.List;

public class MenuDrivenProgram {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        List<String> bookList = new ArrayList<>();
        int choice;
        // 使用do-while循环保证菜单至少展示一次
        do {
            // 展示菜单选项
            System.out.println("===== 图书管理菜单 =====");
            System.out.println("1. 添加图书");
            System.out.println("2. 查询所有图书");
            System.out.println("3. 退出程序");
            System.out.print("请输入你的选择(1-3): ");
            
            // 接收用户输入的选择,处理非数字输入的情况
            if (scanner.hasNextInt()) {
                choice = scanner.nextInt();
                // 使用switch-case匹配用户选择
                switch (choice) {
                    case 1:
                        System.out.print("请输入要添加的图书名称: ");
                        // 接收带空格的图书名称,需要消费掉之前的换行符
                        scanner.nextLine();
                        String bookName = scanner.nextLine();
                        bookList.add(bookName);
                        System.out.println("图书《" + bookName + "》添加成功");
                        break;
                    case 2:
                        if (bookList.isEmpty()) {
                            System.out.println("当前还没有添加任何图书");
                        } else {
                            System.out.println("当前所有图书列表:");
                            for (int i = 0; i < bookList.size(); i++) {
                                System.out.println((i + 1) + ". " + bookList.get(i));
                            }
                        }
                        break;
                    case 3:
                        System.out.println("程序即将退出,感谢使用");
                        break;
                    default:
                        System.out.println("输入的选择无效,请输入1-3之间的数字");
                }
            } else {
                System.out.println("输入格式错误,请输入数字");
                scanner.next(); // 消费掉非数字的输入
                choice = 0; // 设置非退出值,保证循环继续
            }
            System.out.println(); // 输出空行分隔每次操作的结果
        } while (choice != 3);
        scanner.close();
    }
}

代码逻辑解析

上述示例的核心逻辑如下:

  • 首先创建Scanner对象和ArrayList集合,分别用于接收输入和存储图书数据
  • 使用do-while循环包裹整个菜单逻辑,确保用户第一次就能看到菜单,且只有选择3的时候才会退出循环
  • 每次循环开始先打印菜单选项,然后提示用户输入选择,通过hasNextInt判断输入是否为数字,避免输入非数字导致程序报错
  • switch-case根据用户的选择执行不同逻辑,选择1时接收图书名称并添加到集合,选择2时遍历集合输出所有图书,选择3时设置退出条件
  • 输入非1-3的数字或者非数字内容时,给出对应的错误提示,保证程序不会异常终止

常见问题与优化

在实际编写菜单驱动程序时,可能会遇到以下问题:

  • 输入数字后回车,后续的字符串输入被跳过:这是因为nextInt只会读取数字,不会读取后面的换行符,需要在nextInt之后调用一次nextLine消费掉换行符
  • 用户输入非数字导致程序崩溃:可以通过hasNextInt先判断输入类型,不符合要求时消费掉错误输入并给出提示
  • 菜单重复展示时输出太密集:可以在每次循环结束或者菜单展示前输出空行,提升可读性

如果需要扩展功能,只需要在菜单中添加新的选项编号,然后在switch-case中增加对应的case分支,实现对应的功能逻辑即可,整体结构不需要做大的调整。

Java菜单驱动程序控制流程switch_caseScanner修改时间:2026-06-19 22:03:40

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。