初始化Jagged Array Java

时间:2012-05-20 03:49:44

标签: java multidimensional-array jagged-arrays

有没有更好的方法在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"}
                    };

仍然没有更好。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分: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);
        }
    }
}