纸杯蛋糕订单系统:while循环位置错误导致无法持续接单问题
问题解决思路与代码修改
核心问题是你没把整个订单处理流程放到受库存状态控制的外层循环里,导致程序只执行了一次订单逻辑就终止。下面是具体修改方案:
关键修改点
- 新增布尔变量
hasStock,初始设为true,用来控制外层循环的持续执行 - 将订单号生成、用户输入、库存扣减的完整逻辑,包裹在
while(hasStock)循环内部 - 每次处理完一个订单后,检查所有纸杯蛋糕库存是否为0,若全部售罄则把
hasStock设为false,终止循环 - 订单号在每次循环结束后自增,确保下一个订单编号正确
修改后的完整代码示例
import java.util.Scanner; public class CupcakeOrderSystem { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // 初始化三种纸杯蛋糕的库存 int vanillaStock = 10; int chocolateStock = 8; int strawberryStock = 5; boolean hasStock = true; int orderNumber = 1; // 初始订单号 while (hasStock) { System.out.println("=== 订单 #" + String.format("%04d", orderNumber) + " ==="); System.out.println("当前库存:香草味" + vanillaStock + ",巧克力味" + chocolateStock + ",草莓味" + strawberryStock); System.out.println("请输入要订购的纸杯蛋糕编号(1=香草,2=巧克力,3=草莓,0=完成当前订单):"); int choice; while (true) { choice = scanner.nextInt(); if (choice == 0) { break; // 完成当前订单,跳出内层输入循环 } else if (choice >= 1 && choice <= 3) { // 扣减对应库存 switch (choice) { case 1: if (vanillaStock > 0) { vanillaStock--; System.out.println("已订购香草味纸杯蛋糕,剩余库存:" + vanillaStock); } else { System.out.println("香草味已售罄,请选择其他口味"); } break; case 2: if (chocolateStock > 0) { chocolateStock--; System.out.println("已订购巧克力味纸杯蛋糕,剩余库存:" + chocolateStock); } else { System.out.println("巧克力味已售罄,请选择其他口味"); } break; case 3: if (strawberryStock > 0) { strawberryStock--; System.out.println("已订购草莓味纸杯蛋糕,剩余库存:" + strawberryStock); } else { System.out.println("草莓味已售罄,请选择其他口味"); } break; } } else { System.out.println("输入无效,请重新输入"); } } // 检查是否所有库存都售罄 if (vanillaStock == 0 && chocolateStock == 0 && strawberryStock == 0) { hasStock = false; System.out.println("所有纸杯蛋糕已售罄,停止接单"); } else { orderNumber++; System.out.println("当前订单已完成,即将进入下一个订单\n"); } } scanner.close(); } }
代码说明
- 外层循环:
while(hasStock)会持续执行订单流程,直到所有库存为0 - 内层循环:处理当前订单内的用户多次输入,直到用户输入0完成订单
- 库存检查:每次订单完成后判断是否全部售罄,是则终止外层循环,否则订单号自增,进入下一轮订单处理
修改后,程序会在用户完成一个订单后自动进入下一个订单,直到库存全部卖完为止。
内容的提问来源于stack exchange,提问作者moemoe
相关产品推荐
相关产品推荐

