Java实现一个简易版的多级菜单功能

Java实现一个简易版的多级菜单功能

思路概述

实现一个简易版的多级菜单功能,需要用到递归和HashMap的知识。我们可以将菜单项存储在HashMap中,其中键为菜单名称,值为对应菜单的子菜单。如果一个菜单项没有子菜单,我们将其子菜单设置为null。

通过递归的方式,我们可以深度遍历每个菜单项,并打印出每个菜单项的名称。如果该菜单项还有子菜单,我们则继续递归处理。

代码示例

示例一:使用HashMap存储菜单项

import java.util.HashMap;
import java.util.Scanner;

public class Menu {
    private HashMap<String, Menu> children;    // 子菜单项
    private String name;                       // 菜单项名称

    public Menu(String name) {
        this.name = name;
        this.children = new HashMap<>();
    }

    // 添加子菜单项
    public void addChildMenu(Menu menu) {
        children.put(menu.getName(), menu);
    }

    // 获取菜单项名称
    public String getName() {
        return name;
    }

    // 打印菜单项列表
    public void printMenu(int level) {
        String prefix = "";  // 前缀字符串
        for (int i = 0; i < level; i++) {
            prefix += "--";
        }
        System.out.println(prefix + getName());  // 打印菜单项名称

        // 递归打印子菜单项
        if (children != null) {
            for (Menu menu : children.values()) {
                menu.printMenu(level + 1);
            }
        }
    }

    public static void main(String[] args) {
        Menu root = new Menu("root");      // 根菜单项
        Menu file = new Menu("file");      // 一级菜单项
        Menu edit = new Menu("edit");      // 一级菜单项
        Menu sub1 = new Menu("sub1");      // 二级菜单项
        Menu sub2 = new Menu("sub2");      // 二级菜单项
        Menu sub3 = new Menu("sub3");      // 二级菜单项

        root.addChildMenu(file);
        root.addChildMenu(edit);
        file.addChildMenu(sub1);
        file.addChildMenu(sub2);
        edit.addChildMenu(sub3);

        root.printMenu(0);
    }
}

运行上面的代码示例,可以输出以下结果:

root
--file
----sub1
----sub2
--edit
----sub3

示例二:使用Scanner实现交互式输入

import java.util.HashMap;
import java.util.Scanner;

public class Menu {
    private HashMap<String, Menu> children;    // 子菜单项
    private String name;                       // 菜单项名称

    public Menu(String name) {
        this.name = name;
        this.children = new HashMap<>();
    }

    // 添加子菜单项
    public void addChildMenu(Menu menu) {
        children.put(menu.getName(), menu);
    }

    // 获取菜单项名称
    public String getName() {
        return name;
    }

    // 打印菜单项列表
    public void printMenu(int level) {
        String prefix = "";  // 前缀字符串
        for (int i = 0; i < level; i++) {
            prefix += "--";
        }
        System.out.println(prefix + getName());  // 打印菜单项名称

        // 递归打印子菜单项
        if (children != null) {
            for (Menu menu : children.values()) {
                menu.printMenu(level + 1);
            }
        }
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Menu root = new Menu("root");      // 根菜单项

        while (true) {
            System.out.println("请输入菜单项名称:");
            String name = scanner.nextLine();
            if (name.equals("exit")) {
                break;
            }
            String[] items = name.split("\\.");
            Menu parent = root;             // 默认是根菜单项
            for (int i = 0; i < items.length; i++) {
                String item = items[i];
                Menu child = parent.children.get(item);
                if (child == null) {
                    child = new Menu(item);
                    parent.addChildMenu(child);
                }
                parent = child;
            }
        }

        root.printMenu(0);
    }
}

运行上面的代码示例,可以手动输入菜单项名称,并输出相应的菜单项列表。例如,下面的输入:

文件
文件.新建
文件.保存
编辑
编辑.撤销
编辑.恢复
exit

将会输出以下菜单项列表:

root
--文件
----新建
----保存
--编辑
----撤销
----恢复

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java实现一个简易版的多级菜单功能 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Spring Boot+AngularJS+BootStrap实现进度条示例代码

    Spring Boot+AngularJS+BootStrap实现进度条示例代码 在本文中,我们将详细讲解如何使用Spring Boot、AngularJS和BootStrap实现进度条示例代码。我们将介绍两个不同的示例,以说明如何使用这些技术来实现进度条。 示例一:使用AngularJS和BootStrap实现进度条 在这个示例中,我们将使用Angular…

    Java 2023年5月18日
    00
  • Hibernate中Session增删改查操作代码详解

    Hibernate中Session增删改查操作详解 什么是Hibernate Session Hibernate是一个优秀的ORM框架,其核心是由多个API组成,其中最重要的是Session。Session是用于与数据库进行交互的主要接口之一,它提供了一系列的增删改查方法,这些方法需要依赖于Hibernate配置的实体类(Entity)的映射关系在数据库中完…

    Java 2023年5月20日
    00
  • Java集合功能与用法实例详解

    Java集合功能与用法实例详解 Java集合是Java编程语言中的一种容器,可以存储和操作对象。Java集合提供了一组接口和类,用于快速创建各种不同类型的集合,如列表(List)、集(Set)、图(Map)等。在本文中,我们将详细探讨Java集合的功能和用法,并提供两个实例说明。 Java集合的分类 Java集合被分为以下三个主要类别: List:列表类集合…

    Java 2023年5月26日
    00
  • 基于CXF搭建webService的实例讲解

    基于CXF搭建webService的实例讲解可以分为如下步骤: 1. 环境准备 在开始之前,需要准备好以下环境: JDK1.8及以上版本 Apache Maven Apache CXF框架 CXF可以通过Maven进行依赖管理,因此只需要在pom.xml中添加CXF的相关依赖即可,如下所示: <dependency> <groupId&gt…

    Java 2023年5月20日
    00
  • 自定义@RequestBody注解如何获取JSON数据

    自定义@RequestBody注解可以方便我们在处理请求数据时进行更细致的控制和处理。其实,要自定义@RequestBody注解获取JSON数据很简单,只需要通过反射机制获取请求体中的数据并进行处理即可。 以下是具体的步骤: 定义自定义注解 定义一个自定义注解并使用@Target(ElementType.PARAMETER)来标识该注解只能用在参数上,例如:…

    Java 2023年5月26日
    00
  • Java使用DFA算法实现敏感词过滤的示例代码

    我来给您详细讲解下“Java使用DFA算法实现敏感词过滤的示例代码”的完整攻略。 什么是DFA算法 DFA(Deterministic Finite Automaton)算法,也就是确定有穷自动机算法。它是一种字符串处理算法,可以用来过滤敏感词。其主要思路是将一个字符串生成一个DFA状态机,然后再通过该状态机对另一个字符串进行敏感词过滤。 在DFA算法中,生…

    Java 2023年5月19日
    00
  • 什么是垃圾收集器接口?

    以下是关于垃圾收集器接口的详细讲解: 什么是垃圾收集器接口? 垃圾收集器接口是 Java 虚拟机提供的一组接口,用于实现自定义的垃圾收集器。通过实现垃圾收集器接口,可以自定义垃圾收集器的行为和策略,以满足不同的应用场景和需求。 垃圾收集器接口包括以下几个接口: Collector:垃圾收集器接口,定义了垃圾收集的基本行为和策略。 MemoryPoolMXBe…

    Java 2023年5月12日
    00
  • Android发送GET与POST请求的DEMO详解

    下面我将为你详细讲解“Android发送GET与POST请求的DEMO详解”这个主题,包括以下几个方面的内容: 什么是HTTP请求 Android中发送HTTP请求的方式 完整示例:Android发送GET请求 完整示例:Android发送POST请求 什么是HTTP请求 HTTP(HyperText Transfer Protocol)是一种用于传输数据的…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部