java - 多级菜单ArrayLists中对象的循环(Java)

标签 java loops recursion arraylist menu

我是 Java 新手,我正在制作一个多级控制台菜单。我有一个 Item 类,它有一个 ArrayList,它可以包含另一个 Items 以及自己的 Items ArrayLists 等等。

public Item(String key, String name, ArrayList<Item> itemList) {
    this.key = key;
    this.name = name;
    this.itemList = itemList;
} 

我需要对所有数组中的每个 Item 执行 info() (或任何其他方法)(无论我们可以有多少个带有 Item 对象的嵌套数组) 。我写了一些糟糕的、不通用的代码执行方法,仅适用于三级菜单...

public void show() {
    for (int i = 0; i != list.size(); i++) {
        System.out.println(list.get(i).info());
        if (!list.get(i).getItemList().isEmpty()) {
            for (int j = 0; j < list.get(i).getItemList().size(); j++) {
                System.out.println(list.get(i).getItemList().get(j).info());
                if (!list.get(i).getItemList().get(j).getItemList().isEmpty()) {
                    for (int y = 0; y < list.get(i).getItemList().get(j).getItemList().size(); y++) {
                        System.out.println(list.get(i).getItemList().get(j).getItemList().get(y).info());
                    }
                }
            }
        }
    }
}

结果如下:

1. Section one.
1.1. Sub-Section one.
1.1.1. Sub-Sub-Section one.

如果我们不知道菜单深度,有没有通用的方法来循环所有项目?

最佳答案

您需要recursive programming .

不会撒谎,我不是 Java 程序员,但这是我的尝试:


public void show(List<Item> list) {
    for (int i = 0; i < list.size(); i++) {
        System.out.println(list.get(i).info());

        if (!list.get(i).getItemList().isEmpty()) {
            show(list.get(i).getItemList());
        }
    }
}

或者使用 for-each:


public void show(List<Item> list) {
    for (Item item : list) {
        System.out.println(item.info());

        if(!item.getItemList().isEmpty()) {
            show(item.getItemList());
        }
    }
 }

这基本上循环遍历您的初始列表,然后打印信息。如果它包含另一个项目列表,则将该子项目列表传递回其自身。然后它将循环遍历您过去的列表,直到没有更多的子项目列表为止。

关于java - 多级菜单ArrayLists中对象的循环(Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41655235/

相关文章:

java - 我的循环中将字符解析为 ascii 与比较我已经设置的分配值之间是否存在问题?

java - 读取文件的jar

javascript - 创建多维数组然后将每个多维数组推送到另一个数组

javascript - for 循环与 if-else 语句

java - 如何接收十六进制的套接字输入?

JavaFX 我无法通过 observableList 填充表格 View

mysql - Node.js 在循环中与 MySQL 链接 promise

c++ - gcc 4.7 和递归 constexpr 函数

c++ - 递归加法序列C++

java - 我如何获得在 Java 中有重复的所有组合(递归)?