You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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个核心问题:

  1. Item初始数量未设置:在createRegVM方法中,仅将itemCount赋值给售货机,但未设置到创建的Item实例中。Item默认构造函数中itemQuantity为-1,调用decrementItemQuantity()时因不满足>0条件,无法执行递减。
  2. 库存显示错误:displayAvailableItems方法输出的是售货机全局itemCount,而非Item自身的itemQuantity,即使数量变化也无法正确显示。
  3. 可用性状态未同步: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 15:42:09