【发布时间】:2025-11-27 22:15:01
【问题描述】:
我正在尝试构建一个包含对象的 ArrayList。当我将一个对象添加到列表中时,我希望它首先检查该对象的数组列表。如果找到它,我希望它增加该对象中的数量变量,而不是在列表中创建新对象。移除对象时反之亦然。我已经完成了一种在删除对象时有效的方法。但我认为我不完全理解 arraylist 中的方法或创建对象和 arraylist 时的逻辑。当我使用 .contains 或 .equals 时,我没有得到想要的效果。
public class ItemBag {
private ArrayList<Item> inventory = new ArrayList<Item>();
public ItemBag() {
}
public void addItem(Item objName, int quantity) {
if (inventory.contains(objName)) {
System.out.println("if statement is true!");
int i = inventory.indexOf(objName);
inventory.get(i).setQuantity(inventory.get(i).getQuantity() + quantity);
} else {
inventory.add(objName);
objName.setQuantity(quantity);
}
}
public void removeItems(String itemName, int quantiy) {
for (int i = 0; i < inventory.size(); i++) {
if (inventory.get(i).name() == itemName) {
inventory.get(i).setQuantity(inventory.get(i).getQuantity() - quantiy);
if (inventory.get(i).getQuantity() <= 0) {
inventory.remove(inventory.get(i));
}
}
}
}
public void showInventory() {
for (int i = 0; i < inventory.size(); i++) {
System.out.println(inventory.get(i).name() + " : " + inventory.get(i).getQuantity());
}
}
然后在我正在编写的另一个对象中创建 itemBag 时
ItemBag merchantItems = new ItemBag();
public void merchantBob() {
merchantItems.addItem(new HealthPotion() ,3);
merchantItems.showInventory();
System.out.println("add 1");
merchantItems.addItem(new HealthPotion(),1);
merchantItems.showInventory();
物品类
package Items;
public abstract class Item {
private int quantity = 0;
public Item() {
}
public abstract String name();
public abstract int cost();
public abstract String type();
public int getQuantity() {
return quantity;
}
public void setQuantity(int quantity) {
this.quantity = quantity;
}
}
健康药水类
public class HealthPotion extends Potions {
protected int addHealth = 10;
@Override
public int drinkPotion() {
return addHealth;
}
@Override
public String name() {
return "Health Potion";
}
@Override
public int cost() {
return 5;
}
@Override
public String type() {
return "Potion";
}
}
【问题讨论】:
-
if (inventory.get(i).name() == itemName) {-> How do I compare strings in Java? -
发布
Item的代码。我的第一个猜测是你没有实现equals/hashcode -
还可以使用地图,以便将对象与大小相关联
-
魔药类目前是空的,它扩展了Item。