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

すべてを、少なくとも 1 つの文字列を含む 3 つの深さの配列にする必要があります。

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 に答える