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
相关产品推荐
相关产品推荐

