Java 食物菜单 - 无法存储用户输入和查看后

问题描述 投票:0回答:1

我是 Java 新手,已经开始了一个创建食物菜单的基本项目。我已经设法让用户选择披萨配料和存储的第一部分,以便用户可以在主菜单上查看订单,但是在尝试存储饮料选项时遇到问题。我为披萨、饮料和 viewOrder 设置了单独的类,如果需要,我可以将其复制到聊天中。感谢任何关于做什么以及我如何设置代码的反馈,因为我很想学习!

用户选择饮料后,系统会将他们带回到主菜单。当选择查看订单时,它会返回错误消息,指出其订单为空。我认为这可能与视图顺序中的 if 语句有关。

import java.util.ArrayList;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int userInput; // Declare the variable outside the loop

        String selectedPizza = null;
        ArrayList<String> selectedToppings = new ArrayList<>();
        ArrayList<String> selectedDrinks = new ArrayList<>(); // Declare the ArrayList for drinks

        while (true) {
            Order.orderMenu(); // Display the menu
            userInput = scanner.nextInt();
            scanner.nextLine(); // Consume the newline character

            if (userInput == 1) {
                FoodMenu.displayMenu();

                int userInput1 = scanner.nextInt();
                scanner.nextLine();

                if (userInput1 == 1) {
                    selectedPizza = "Pizza"; // Store the selected food option

                    // Collect user's topping selections
                    int toppingsSelected = 0;
                    while (toppingsSelected < 4) { // asks the user to select 4 toppings
                        System.out.print("Select a topping: ");
                        String topping = scanner.nextLine(); // user input
                        selectedToppings.add(topping); // adds toppings selected
                        toppingsSelected++;
                    }
                } else if (userInput1 == 2) {
                    // User gets given drinks options to order here
                    Beverages.drinkOptions();

                    String selectedDrink = Beverages.getDrinkChoice(scanner);
                    if (selectedDrink != null) {
                            selectedDrinks.add(selectedDrink);
                        } else {
                            System.out.println("Please enter a valid drink number.");
                    }
                } else {
                    System.out.println("Please enter a valid selection.");
                }
            } else if (userInput == 2) {
                // View order logic
                if (selectedPizza != null) {
                    OrderView.viewOrder(selectedPizza, selectedToppings, selectedDrinks);
                } else {
                    System.out.println("Your order is empty, please add an item from the menu first.");
                }
            } else if (userInput == 3) {
                System.out.println("Thank you, your order is on the way");
                break;
            } else {
                System.out.println("Please enter a valid selection.");
            }
        }
        scanner.close();
    }
}
java java.util.scanner
1个回答
0
投票

您面临的问题可能确实与您如何处理所选饮料的存储和查看订单逻辑有关。让我们检查一下代码,看看是否可以识别并解决问题。

问题似乎在于您在显示订单之前如何检查空订单。您正确地检查了 selectedPizza 是否为空,但您还需要检查 selectedToppings 或 selectedDrinks 是否为空。以下是解决此问题的修改后的视图顺序逻辑:

} else if (userInput == 2) {
    // View order logic
    if (selectedPizza != null || !selectedToppings.isEmpty() || !selectedDrinks.isEmpty()) {
        OrderView.viewOrder(selectedPizza, selectedToppings, selectedDrinks);
    } else {
        System.out.println("Your order is empty, please add an item from the menu first.");
    }
}

现在我们来解决选择饮料后返回主菜单的问题。您处理饮料选择和返回主菜单的方式似乎不错。问题可能出在您的饮料课程中。您提到您有一个 getDrinkChoice 方法。确保此方法正确处理用户输入并返回所选饮料。以下是该方法的示例:

public class Beverages {
    public static String getDrinkChoice(Scanner scanner) {
        int userInput = scanner.nextInt();
        scanner.nextLine(); // Consume the newline character

        switch (userInput) {
            case 1:
                return "Coke";
            case 2:
                return "Sprite";
            case 3:
                return "Water";
            default:
                return null; // Return null for invalid choices
        }
    }
}

记得根据您的实际饮品选择调整饮品选项以及相应的返回值。

最后,确保在整个程序中正确处理用户输入,包括在 nextInt 调用后使用换行符以避免意外行为。

通过这些调整,您的程序应该能够更好地正确处理饮料选择和查看订单逻辑。继续努力,快乐编码!

© www.soinside.com 2019 - 2024. All rights reserved.