如何用两个ArrayList分别存储冰淇淋口味及对应售卖次数?
冰淇淋店口味售卖量统计实现(双ArrayList方案)
首先预先定义两个全局集合,两个集合的索引一一对应:
// 存储所有已录入的冰淇淋口味 private ArrayList<String> allFlavours = new ArrayList<>(); // 存储对应索引口味的累计售卖次数 private ArrayList<Integer> flavourSaleCounter = new ArrayList<>();
一、调整新增冰淇淋库存逻辑
新增冰淇淋时,判断当前口味是否已经纳入统计列表,未出现过则新增统计条目,初始售卖次数为0:
IceCream newIceCream = new IceCream(); Integer id = Console.readInt("Id: "); String name = Console.readString("Ice cream name: "); Float price = (float)Console.readDouble("Price: "); String flavour = Console.readString("Flavour: "); newIceCream.setId(id); newIceCream.setNome(name); newIceCream.setPreco(price); newIceCream.setSabor(flavour); iceCreamStock.add(newIceCream); // 新增口味统计判断逻辑 int flavourIndex = allFlavours.indexOf(flavour); if (flavourIndex == -1) { // 口味首次出现,加入统计列表 allFlavours.add(flavour); flavourSaleCounter.add(0); }
二、调整售卖冰淇淋逻辑
成功匹配到要售卖的冰淇淋后,拿到该商品的口味,找到对应统计索引后将售卖次数+1即可,同时优化原有循环逻辑避免索引异常:
Integer sellIceCream = Console.readInt("Which ice cream to sell? (id)"); boolean iceCreamExists = false; for (int i = 0; i < iceCreamStock.size() && !iceCreamExists; i++) { if (iceCreamStock.get(i).getId().equals(sellIceCream)) { iceCreamExists = true; IceCream soldItem = iceCreamStock.get(i); soldIceCream.add(soldItem); iceCreamStock.remove(i); salesCounter++; System.out.println("Ice cream sold."); // 新增口味售卖次数统计逻辑 int targetIndex = allFlavours.indexOf(soldItem.getSabor()); flavourSaleCounter.set(targetIndex, flavourSaleCounter.get(targetIndex) + 1); } } if (!iceCreamExists) { System.out.println("Ice cream not found"); }
三、查看各口味售卖量示例
需要输出统计结果时,直接遍历两个对应集合即可:
for (int i = 0; i < allFlavours.size(); i++) { System.out.println("口味:" + allFlavours.get(i) + ",累计售卖:" + flavourSaleCounter.get(i) + "份"); }
内容的提问来源于stack exchange,提问作者Paulo Lima
相关产品推荐
相关产品推荐

