java - 我一直收到关于最终输出的错误
问题描述
我一直得到与我预期不同的输出。但是,代码显然运行正确,提供了所需的输出元素,以及一些额外的冗余元素,如开胃菜和主菜。
请查看附加代码,并在 Eclipse IDE 上运行时输出。
//class FoodOrder
class Main {
// Method to display menu
static void display(String menu[]) {
for (int i = 0; i < menu.length; i++) {
System.out.println(" " + i + " - " + menu[i]);
}
System.out.print("Enter the number for your selection: ");
}
// main method
public static void main(String[] args) {
// menu lists:
String mainMenu[] = { "Nothing", "Appetizer", "Main Course", "Dessert" };
String dessertMenu[] = { "Nothing", "Baklava", "Rice Pudding", "Chocolate Cake" };
String appetizerMenu[] = { "Nothing", "Oysters", "Grilled Octopus", "Hummus" };
String mainCourseMenu[] = { "Nothing", "Steak", "Chicken", "Fish", "Vegetarian" };
String toppingsMenu[] = { "Nothing", "Olive Oil", "Paprika", "Olives" };
String list = "";
// create an instance of Scanner class
Scanner sc = new Scanner(System.in);
boolean valid;
System.out.println("Welcome to the food festival!");
String ans;
do {
System.out.print("Would you like to place an order? ");
ans = sc.next();
valid = ((ans.equals("YES")) || ans.equals("YEs") || ans.equals("Yes") || ans.equals("yES")
|| ans.equals("yeS") || ans.equals("yEs") || ans.equals("YeS") || ans.equals("yes")
|| (ans.equals("NO")) || ans.equals("No") || ans.equals("nO") || ans.equals("no"));
} while (!valid);
if ((ans.equals("NO")) || (ans.equals("No")) || (ans.equals("nO")) || (ans.equals("no"))) {
System.out.println("Thank you for stopping by, maybe next time you’ll sample our menu.");
return;
}
if (ans.equals("YES") || ans.equals("YEs") || ans.equals("Yes") || ans.equals("yES") || ans.equals("yeS")
|| ans.equals("yEs") || ans.equals("YeS") || ans.equals("yes")) {
System.out.print("What is your name for the order? ");
String name = sc.next();
System.out.println("");
int m, n, k;
while (true) {
Menu:
// proocess to select the menu items
System.out.println("Select from menu, " + name);
display(mainMenu);
n = sc.nextInt();
if (n == 0)
break;
if (n == 1) {
while (true) {
System.out.println("");
System.out.println("Appetizer Menu:");
display(appetizerMenu);
m = sc.nextInt();
list = list + "Appetizer:[" + appetizerMenu[m] + ": ";
if (m == 0) {
break;
}
while (true) {
System.out.println("");
System.out.println("Toppings Menu:");
display(toppingsMenu);
k = sc.nextInt();
if (k == 0)
break;
list = list + toppingsMenu[k] + " ";
}
list = list + "]\n";
}
}
if (n == 2) {
while (true) {
System.out.println("");
System.out.println("Main Course Menu:");
display(mainCourseMenu);
m = sc.nextInt();
list = list + "Main Course :[" + mainCourseMenu[m] + ": ";
if (m == 0) {
break;
}
while (true) {
System.out.println("");
System.out.println("Toppings Menu:");
display(toppingsMenu);
k = sc.nextInt();
if (k == 0)
break;
list = list + toppingsMenu[k] + "]\n";
}
}
}
if (n == 3) {
while (true) {
System.out.println("");
System.out.println("Dessert Menu:");
display(dessertMenu);
m = sc.nextInt();
list = list + "Main Course :[" + dessertMenu[m] + ": ";
if (m == 0) {
break;
}
while (true) {
System.out.println("");
System.out.println("Toppings Menu:");
display(toppingsMenu);
k = sc.nextInt();
if (k == 0)
break;
list = list + toppingsMenu[k] + "]\n";
}
}
}
} // end while loop
System.out.println("Here is your order " + name);
System.out.println(list);
System.out.println("Enjoy your meal!");
} // end of if
}// main method
}// end of class
这是我应该得到的输出:
Here is your order Superman:
Appetizer: [ Hummus: Olives, Olive Oil ]
Main Course: [ Fish: Paprika ]
Dessert: [ Baklava: ]
Enjoy your meal!
不幸的是,我得到了这个输出:
Here is your order Superman:
Appetizer:[Hummus: Olives Olive Oil ]
Appetizer:[Nothing: Main Course :[Fish: Paprika]
Main Course :[Nothing: Main Course :[Baklava:
Main Course :[Nothing:
Enjoy your meal!
解决方案
我做了一些假设,并进行了实施。您的实现存在一些错误:
- 您需要检查列表是否为空以添加“,”
- 您首先添加选择,然后检查它是否是退出选项
我认为这可能是您正在寻找的代码:
public static String collectToppings(Scanner sc, String[] toppingsMenu) {
String list = "";
while (true) {
System.out.println("");
System.out.println("Toppings Menu:");
display(toppingsMenu);
int k = sc.nextInt();
if (k == 0)
break;
if (list.length() == 0) {
list = toppingsMenu[k];
} else {
list += ", " + toppingsMenu[k];
}
}
if (list.length() > 0) {
return list + " ]\r\n\r\n";
} else {
return "]\r\n\r\n";
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String name = "Superman";
int m, n;
String[] mainMenu = new String[] { "Exit", "Appetizer Menu", "Toppings Menu", "Main Course Menu" };
String[] appetizerMenu = new String[] {"Exit", "Hummus"};
String[] mainCourseMenu = new String[] {"Exit", "Fish"};
String[] dessertMenu = new String[] {"Exit", "Baklava"};
String list ="";
while (true) {
// proocess to select the menu items
System.out.println("Select from menu, " + name);
display(mainMenu);
n = sc.nextInt();
if (n == 0)
break;
if (n == 1) {
while (true) {
System.out.println("");
System.out.println("Appetizer Menu:");
display(appetizerMenu);
m = sc.nextInt();
if (m == 0) {
break;
}
list = list + "Appetizer: [ " + appetizerMenu[m] + ": ";
String[] toppingsMenu = new String[] {"Exit", "Olives", "Olive Oil"};
list += collectToppings(sc, toppingsMenu);
}
}
if (n == 2) {
while (true) {
display(mainCourseMenu);
m = sc.nextInt();
if (m == 0) {
break;
}
list = list + "Main Course: [ " + mainCourseMenu[m] + ": ";
String[] toppingsMenu = new String[] {"Exit", "Paprika"};
list += collectToppings(sc, toppingsMenu) ;
}
}
if (n == 3) {
while (true) {
display(dessertMenu);
m = sc.nextInt();
if (m == 0) {
break;
}
list = list + "Dessert: [ " + dessertMenu[m] + ": ";
String[] toppingsMenu = new String[] {"Exit", "...", "..."};
list += collectToppings(sc, toppingsMenu);
}
}
}
System.out.println("Here is your order " + name + ":\r\n");
System.out.println(list);
System.out.println("Enjoy your meal!");
}
private static void display(String[] menu) {
int i = 0;
for (String s : menu) {
System.out.println(i++ + ". " + s);
}
}
推荐阅读
- css - 如何在闪亮进度条的详细信息中添加换行符?
- javascript - Fetch API POST 请求响应返回空文本
- c++ - 如何在单独的源文件中定义模板函数并调用它,只包括标题
- ios - 类型不符合协议“可编码”
- konvajs - 向 Konva 形状添加描边而不增加其大小
- javascript - javascript scrollIntoView 函数在我的全局事件侦听器中不起作用
- javascript - 如何将 DOM 数据转换为 json
- html - 圆形元素上的框阴影
- asp.net-core - Kubernetes:向环境添加入口内部 ip
- python - 在执行期间更改 conda 环境