dabocaiqq 2023-07-19 22:35 采纳率: 56%
浏览 18
已结题

Java语言怎么用一个类定义一个带有功能层次的层次的菜单的代码的实现的过程是什么思路的呢

Java语言怎么用一个类定义一个带有功能层次的层次的菜单的代码的实现的过程是什么思路的呢?是不是和函数嵌套的原理类似

  • 写回答

3条回答 默认 最新

  • 全栈若城 全栈领域优质创作者 2023-07-19 22:39
    关注

    在Java语言中,可以通过类来定义带有功能层次的菜单。这种实现方式和函数嵌套有一定的相似之处,但是更加灵活和面向对象。

    import java.util.Scanner;
    
    public class MenuExample {
        public static void main(String[] args) {
            Menu menu = new Menu(); // 创建菜单对象
    
            menu.addMenuItem("1. 函数A", () -> {
                System.out.println("执行函数A");
            });
    
            menu.addMenuItem("2. 函数B", () -> {
                System.out.println("执行函数B");
            });
    
            Menu subMenu = new Menu();
            subMenu.addMenuItem("3.1. 函数C", () -> {
                System.out.println("执行函数C");
            });
            subMenu.addMenuItem("3.2. 函数D", () -> {
                System.out.println("执行函数D");
            });
            menu.addSubMenu("3. 函数C和函数D", subMenu);
    
            menu.addMenuItem("4. 退出", () -> {
                System.out.println("感谢使用,再见!");
                menu.exit(); // 菜单退出
            });
    
            menu.display();
        }
    }
    
    // 菜单类
    class Menu {
        private List<MenuItem> menuItems; // 菜单项列表
    
        public Menu() {
            menuItems = new ArrayList<>();
        }
    
        // 添加菜单项
        public void addMenuItem(String label, Runnable action) {
            MenuItem menuItem = new MenuItem(label, action);
            menuItems.add(menuItem);
        }
    
        // 添加子菜单
        public void addSubMenu(String label, Menu subMenu) {
            SubMenu menuItem = new SubMenu(label, subMenu);
            menuItems.add(menuItem);
        }
    
        // 显示菜单
        public void display() {
            Scanner scanner = new Scanner(System.in);
            int choice = 0;
    
            while (choice != menuItems.size()) {
                System.out.println("菜单");
                for (int i = 0; i < menuItems.size(); i++) {
                    System.out.println(menuItems.get(i).getLabel());
                }
    
                System.out.print("请输入您的选择:");
                choice = scanner.nextInt();
    
                if (choice > 0 && choice <= menuItems.size()) {
                    menuItems.get(choice - 1).execute();
                } else {
                    System.out.println("无效的选择,请重新输入!");
                }
            }
    
            scanner.close();
        }
    
        // 菜单退出
        public void exit() {
            System.exit(0);
        }
    }
    
    // 菜单项类
    class MenuItem {
        private String label; // 菜单项显示的标签
        private Runnable action; // 菜单项对应的动作
    
        public MenuItem(String label, Runnable action) {
            this.label = label;
            this.action = action;
        }
    
        // 执行菜单项的动作
        public void execute() {
            action.run();
        }
    
        public String getLabel() {
            return label;
        }
    }
    
    // 子菜单类,继承自菜单项类
    class SubMenu extends MenuItem {
        private Menu subMenu; // 子菜单对象
    
        public SubMenu(String label, Menu subMenu) {
            super(label, null); // 子菜单项的动作为null
            this.subMenu = subMenu;
        }
    
        // 执行子菜单的显示和操作
        @Override
        public void execute() {
            subMenu.display();
        }
    }
    

    代码使用了 Menu 类来表示菜单,MenuItem 类表示菜单项。菜单项可以是普通的功能项(MenuItem),也可以是包含子菜单的项(SubMenu)。每个菜单项都有对应的标签和执行动作(使用 Runnable)。

    通过在主函数中创建菜单对象并添加菜单项,然后调用 display() 方法来显示菜单。用户可以根据菜单的提示进行选择,并执行相应的动作。

    当菜单项是子菜单时,在执行子菜单的动作时会进入子菜单的循环显示和操作,从而实现了功能层次的菜单。
    可以这么说使用类来定义带有功能层次的菜单可以更好地组织和管理菜单的结构和逻辑,实现灵活、可扩展的菜单功能。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 7月27日
  • 已采纳回答 7月19日
  • 创建了问题 7月19日

悬赏问题

  • ¥200 csgo2的viewmatrix值是否还有别的获取方式
  • ¥15 Stable Diffusion,用Ebsynth utility在视频选帧图重绘,第一步报错,蒙版和帧图没法生成,怎么处理啊
  • ¥15 请把下列每一行代码完整地读懂并注释出来
  • ¥15 pycharm运行main文件,显示没有conda环境
  • ¥15 寻找公式识别开发,自动识别整页文档、图像公式的软件
  • ¥15 为什么eclipse不能再下载了?
  • ¥15 编辑cmake lists 明明写了project项目名,但是还是报错怎么回事
  • ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
  • ¥15 特定网页无法访问,已排除网页问题
  • ¥50 如何将脑的图像投影到颅骨上