You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java点餐系统问题:饮品选择无法存入订单,查看订单报错

问题分析与解决

核心问题

你猜对了,问题确实出在查看订单的if判断逻辑里。当前代码只检查selectedPizza != null,但用户只点饮品时,selectedPizza始终是null——哪怕selectedDrinks里已经有内容,也会触发“订单为空”的错误提示。

解决方法

修改查看订单的判断条件,同时检查披萨是否已选择或者饮品列表是否非空:

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

额外代码优化建议

  • 统一订单数据结构:目前用零散变量(selectedPizza、selectedToppings、selectedDrinks)管理订单,后续扩展菜品会很麻烦。建议创建Order类封装这些字段,比如:

    class Order {
        private String pizza;
        private List<String> toppings;
        private List<String> drinks;
        // 构造方法、getter/setter
    }
    

    这样订单数据更集中,也符合面向对象设计思想。

  • 使用接口声明集合:把ArrayList<String> selectedToppings = new ArrayList<>();改成List<String> selectedToppings = new ArrayList<>();,后续更换集合实现类(比如LinkedList)时无需修改大量代码。

  • 简化配料选择循环:当前while循环统计选择次数,换成for循环更直观:

    for (int i = 0; i < 4; i++) {
        System.out.print("Select a topping: ");
        String topping = scanner.nextLine();
        selectedToppings.add(topping);
    }
    
  • 增强输入合法性校验:用户输入非数字时,scanner.nextInt()会抛出异常,建议用hasNextInt()先判断输入是否合法,或增加异常捕获逻辑。

内容的提问来源于stack exchange,提问作者G. Parker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 07:55:27