有没有更好的方法在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"}
};
仍然没有更好。
答案 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);
}
}
}