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技术站