在控制台中创建多级菜单

在Java中,我们可以通过使用递归的方式来创建多级菜单,使用户可以在控制台中进行交互式操作。下面将介绍如何实现这一功能。

1. 创建菜单项类

首先,我们需要创建一个菜单项类(MenuItem),用于表示菜单中的每一个选项。该类包含一个名称和一个子菜单列表。

public class MenuItem {
    private String name;
    private List<MenuItem> subMenuItems;

    public MenuItem(String name) {
        this.name = name;
        this.subMenuItems = new ArrayList<>();
    }

    public String getName() {
        return name;
    }

    public List<MenuItem> getSubMenuItems() {
        return subMenuItems;
    }

    public void addSubMenu(MenuItem menuItem) {
        subMenuItems.add(menuItem);
    }
}

2. 创建菜单管理类

接下来,我们创建一个菜单管理类(MenuManager),用于管理整个菜单系统。该类包含一个根菜单项和一个当前菜单项。

import java.util.Scanner;

public class MenuManager {
    private MenuItem rootMenu;
    private MenuItem currentMenu;
    private Scanner scanner;

    public MenuManager(MenuItem rootMenu) {
        this.rootMenu = rootMenu;
        this.currentMenu = rootMenu;
        this.scanner = new Scanner(System.in);
    }

    public void displayMenu() {
        System.out.println("当前菜单:" + currentMenu.getName());
        System.out.println("请选择操作:");
        for (int i = 0; i < currentMenu.getSubMenuItems().size(); i++) {
            System.out.println((i + 1) + ". " + currentMenu.getSubMenuItems().get(i).getName());
        }
        System.out.println("0. 返回上级菜单");
    }

    public void run() {
        while (true) {
            displayMenu();
            int choice = scanner.nextInt();
            if (choice == 0) {
                if (currentMenu != rootMenu) {
                    currentMenu = rootMenu;
                } else {
                    System.out.println("已经是根菜单,无法返回上级菜单!");
                }
            } else if (choice > 0 && choice <= currentMenu.getSubMenuItems().size()) {
                currentMenu = currentMenu.getSubMenuItems().get(choice - 1);
            } else {
                System.out.println("无效选项,请重新选择!");
            }
        }
    }

    public static void main(String[] args) {
        MenuItem rootMenu = new MenuItem("根菜单");
        MenuItem subMenu1 = new MenuItem("子菜单1");
        MenuItem subMenu2 = new MenuItem("子菜单2");
        rootMenu.addSubMenu(subMenu1);
        rootMenu.addSubMenu(subMenu2);

        MenuManager menuManager = new MenuManager(rootMenu);
        menuManager.run();
    }
}

现在,我们已经完成了一个简单的多级菜单系统。用户可以根据提示在控制台中选择菜单项,进入子菜单或返回上级菜单。

状态图

stateDiagram
    [*] --> 根菜单
    根菜单 --> 子菜单1
    根菜单 --> 子菜单2
    子菜单1 --> 根菜单
    子菜单2 --> 根菜单

旅行图

journey
    title 多级菜单操作流程
    [*] --> 输入选项: 选择菜单项
    输入选项 --> 选择子菜单: 选项不为0
    选择子菜单 --> 返回上级菜单: 选项为0
    返回上级菜单 --> 输入选项: 返回上级菜单

通过以上代码示例和状态图、旅行图,我们可以清晰地了解如何在控制台中创建多级菜单。这种方式可以方便用户进行交互式操作,提高用户体验。希望本文对您有所帮助。