Java多类架构下商品数量递减失效及实现方法问询
问题解答
一、技术问题1:在包含多个类的Java项目中,如何实现数组中Item的数量递减操作?
实现数组中Item的数量递减,核心是确保能正确访问数组中的Item实例并调用其数量修改方法,具体步骤如下:
步骤1:为Item类添加数量属性与递减方法
确保Item类包含数量字段,以及安全的递减逻辑:public class Item { private int itemQuantity; // 构造函数、Getter/Setter省略 public void decrementItemQuantity() { if (itemQuantity > 0) { itemQuantity--; // 可选:数量为0时同步更新可用性状态 if (itemQuantity == 0) { setItemAvailability(false); } } } }步骤2:在持有数组的类中定位目标Item
比如在自动售货机类中,通过索引或标识找到数组中的目标Item,调用递减方法:public class VendingMachine { private Item[] itemArray; // 数组初始化逻辑省略 public void decrementItemByIndex(int index) { if (index >= 0 && index < itemArray.length) { Item target = itemArray[index]; if (target != null) { target.decrementItemQuantity(); } } } }步骤3:处理边界情况
需判断数组索引合法性、Item实例是否非空、当前数量是否大于0,避免空指针或负数量异常。
二、技术问题2:RegularVendingMachine购买后商品数量未更新的排查与修复
问题排查
从提供的代码中可定位3个核心问题:
- Item初始数量未设置:在
createRegVM方法中,仅将itemCount赋值给售货机,但未设置到创建的Item实例中。Item默认构造函数中itemQuantity为-1,调用decrementItemQuantity()时因不满足>0条件,无法执行递减。 - 库存显示错误:
displayAvailableItems方法输出的是售货机全局itemCount,而非Item自身的itemQuantity,即使数量变化也无法正确显示。 - 可用性状态未同步:
decrementItemQuantity递减数量后,未同步更新itemAvailability字段(虽isAvailable()基于数量判断,但字段同步可避免潜在逻辑冲突)。
修复方案
修复1:初始化Item时设置数量与可用性
修改createRegVM中创建Item的逻辑,添加数量和可用性设置:
// 创建Item后添加以下两行 item.setItemQuantity(itemCount); item.setItemAvailability(itemCount > 0); vendingMachine.addItem(String.valueOf(i + 1), item);
修复2:修正库存显示逻辑
修改displayAvailableItems方法,输出Item自身的数量:
// 原代码输出全局itemCount,替换为Item实例的数量 System.out.println("Slot " + slot + " - " + item.getItemName() + " - Php " + item.getItemPrice() + " - Quantity: " + item.getItemQuantity());
修复3:优化递减方法同步可用性
修改Item类的decrementItemQuantity方法,确保数量为0时同步更新状态:
public void decrementItemQuantity() { if (itemQuantity > 0) { itemQuantity--; setItemAvailability(itemQuantity > 0); } }
额外检查
确认getItem(slot)方法返回的是售货机inventory中存储的Item实例(而非新对象),保证递减操作修改的是库存中的实际数据。
内容的提问来源于stack exchange,提问作者Dustin Minrod
相关产品推荐
相关产品推荐

