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日

相关文章

  • java连接sql server 2008数据库代码

    下面是Java连接SQL Server 2008数据库的完整攻略。 第一步:导入SQL Server JDBC驱动 在项目中导入SQL Server的JDBC驱动,可以从Microsoft官网下载。 下载完成后,在Java项目中引入JDBC驱动程序。如果使用Maven管理项目,可以在pom.xml文件中添加以下依赖: <dependency> &…

    Java 2023年5月19日
    00
  • Java集合List与Array的相互转换

    下面就为你详细讲解Java集合List与Array的相互转换。 List转Array 1.使用toArray()方法 将List转为数组最简单的方式就是使用List提供的toArray()方法。该方法返回一个持有此列表元素的数组。 List<String> list = new ArrayList<>(); list.add(&quo…

    Java 2023年5月26日
    00
  • Java中equals()方法实例详解

    Java中equals()方法实例详解 在Java语言中,Object类中的equals()方法用来比较对象的内容是否相等。相较于Java中的”==”运算符来说,它比较的不是变量在内存中的地址,而是变量的内 容。因此,equals()方法在很多时候比”==”更加实用。 equals方法的详细用法 public boolean equals(Object ob…

    Java 2023年5月26日
    00
  • Java对字符串进行加密解密

    Java 对字符串进行加密解密攻略 简介 Java 中提供了多种加密解密的方案,涉及对称加密、非对称加密、哈希算法等等。本文将主要讲解在 Java 中对字符串进行加密解密的方法。 对称加密 对称加密是指加密和解密使用同一个密钥的方式,常见的有 AES、DES 等算法。 AES 加密 在 Java 中使用 AES 进行加密解密的主要步骤如下: 生成一个 AES…

    Java 2023年5月26日
    00
  • spring集成httpclient配置的详细过程

    下面是spring集成httpclient配置的详细过程。 1. 引入依赖 首先在pom.xml中引入httpclient和httpasyncclient的依赖: <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>http…

    Java 2023年5月31日
    00
  • springmvc @RequestBody String类型参数的使用

    好的。 在SpringMVC中使用@RequestBody注解可以将请求体中的JSON对象映射为方法参数中的Java对象。针对参数为String类型的情况,可以直接通过@RequestBody注解将请求体中的字符串映射到String类型的方法参数中。 下面是使用@RequestBody注解的示例代码: @Controller public class Use…

    Java 2023年5月26日
    00
  • Java基础之FastJson详解

    Java基础之FastJson详解 FastJson是一个Java语言编写的轻量级JSON解析工具,具有解析速度快、易用性好等优点。本文将从以下几个方面详细讲解FastJson的使用: 导入FastJson依赖 基本用法 使用注解进行自定义序列化与反序列化 高级特性 导入FastJson依赖 在使用FastJson之前,我们需要在项目中导入FastJson依…

    Java 2023年5月26日
    00
  • Java获取随机数的3种方法

    Java获取随机数的3种方法 在Java中,生成随机数是非常常见的任务,对于一些涉及到密码、加密等的场景更是必要的。Java提供了多个生成随机数的方法,下面是Java获取随机数的3种方法的详细解释。 方法1:使用Math.random()生成随机数 Math.random()方法可以用于生成随机数。返回值是一个大于等于0.0且小于1.0的double类型的伪…

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