C语言点餐算法问题:如何仅显示已填写订单而非全部槽位?
解决点餐算法Case3显示全量槽位的问题
核心问题定位
你当前的Case3逻辑应该是直接遍历了0到100的所有槽位索引,不管对应位置是否有有效订单数据,导致空槽位也被输出。
具体修复方案
方案1:遍历前过滤有效订单
如果订单存储在数组/列表中,先筛选出非空/已填写的订单条目再遍历:
# 示例(假设订单存储在order_slots列表中) valid_orders = [order for order in order_slots if order is not None and order != {}] for order in valid_orders: # 输出订单报告内容 print(f"订单ID: {order['id']}, 菜品: {order['dishes']}")
方案2:改用动态存储结构
不要用固定长度(100)的数组,改用字典或链表来存储订单,只保留有数据的条目:
# 用字典存储,键为槽位号,值为订单数据 orders_dict = {} # 当创建订单时,仅在对应槽位有数据时添加 orders_dict[slot_number] = {"id": slot_number, "dishes": ["宫保鸡丁"]} # 生成报告时直接遍历字典的values for order in orders_dict.values(): # 输出订单内容 print(order)
方案3:遍历过程中跳过空槽位
如果必须保留固定长度数组,在遍历每个槽位时增加判断,跳过无数据的条目:
// 示例Java代码 Order[] orderSlots = new Order[100]; for (int i = 0; i < orderSlots.length; i++) { Order order = orderSlots[i]; if (order == null || order.getDishes().isEmpty()) { continue; // 跳过空槽位 } // 输出订单报告 System.out.println("订单槽位" + i + ": " + order.toString()); }
关键注意点
- 确认订单数据的非空判断逻辑:要匹配你实际的空订单定义(比如是
null、空对象还是特定的默认值) - 如果是数据库存储的订单,查询时直接加条件
WHERE 订单状态 != '空',避免拉取全量数据
内容的提问来源于stack exchange,提问作者Scuttler
相关产品推荐
相关产品推荐

