【问题标题】:Initialise Jagged Array Java初始化锯齿状数组 Java
【发布时间】:2012-05-20 03:49:43
【问题描述】:

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

还是不行。

【问题讨论】:

    标签: java multidimensional-array jagged-arrays


    【解决方案1】:

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

    在字符串的 3 维数组中,你有一个数组,它只包含数组,它只包含数组,它只包含字符串。您在数组中穿插字符串,这是不允许的。

    【讨论】:

    • 非常感谢您的回复。 :)
    【解决方案2】:

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

    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);
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2010-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-09
      • 2019-06-17
      • 2014-05-03
      • 2011-08-21
      • 1970-01-01
      相关资源
      最近更新 更多