0

有没有更好的方法来用 Java 表示这个菜单结构?我认为问题在于我正在声明一个包含字符串数组的数组 - 不可能吧?

String[][][] menu = {
                    "1. Select Store",
                    {
                        "1. Manage Stock",
                        {
                            "1. Buy More",
                            "2. Steal It"
                        },
                        "2. Fire Employee",
                        "3. Exit"
                    },
                    "2. List Stores",
                    "3. Exit"
                    };

所以我尝试了这个:

    String[][][] menu = {
                    {"1. Select Store"},
                    {
                        {"1. Manage Stock"},
                        {
                            {"1. Buy More"},
                            {"2. Steal It"}
                        },
                        {"2. Fire Employee"},
                        {"3. Exit"}
                    },
                    {"2. List Stores"},
                    {"3. Exit"}
                    };

还是好不了。

4

2 回答 2

2

根据您提供的示例数据,您正在寻找树结构,而不是 3 维数组。

在字符串的 3 维数组中,您有一个数组,它只包含数组,它只包含数组,它只包含字符串。您正在用字符串散布数组,这是不允许的。

于 2012-05-20T04:15:36.910 回答
1

您需要使所有内容至少是一个包含一个字符串的三深数组:

String[][][] menu = {
    { { "1. Select Store" } },
            { { "1. Manage Stock" }, 
                    { "1. Buy More", "2. Steal It" },
            { "2. Fire Employee" },
            { "3. Exit" } },
    { { "2. List Stores"} },
    { { "3. Exit" } } 
};

可能比您想要的复杂一点,但如果每个菜单项都知道它的子菜单,那么跟踪它就更容易了。这将打印出具有类似缩进的示例。

public Menu(){
    List<Option> options = new ArrayList<Option>();

    Option buyMore = new Option("Buy More");
    Option stealIt = new Option("Steal It");

    Option manageStock = new Option("Manage Stock", Arrays.asList(buyMore, stealIt));
    Option fireEmployee = new Option("Fire Employee");
    Option exit = new Option("Exit");

    Option selectStore = new Option("Select Store", Arrays.asList(manageStock, fireEmployee, exit));
    Option listStores = new Option("List Stores");
    Option exitStore = new Option("Exit");

    options.addAll(Arrays.asList(selectStore, listStores, exitStore));

    for(int i = 0; i < options.size(); ++i){
        options.get(i).print("", i + 1);
    }
}

class Option{
    String title;
    List<Option> subOptions;

    public Option(String title, List<Option> subOptions){
        this.title = title;
        this.subOptions = subOptions;
    }

    public Option(String title){
        this.title = title;
        this.subOptions = new ArrayList<Option>();
    }

    public void print(String indent, int number){
        System.out.println(indent + number + ". " + title);
        for(int i = 0; i < subOptions.size(); ++i){
            subOptions.get(i).print(indent + "  ", i+ 1);
        }
    }
}
于 2012-05-20T04:13:17.673 回答