Java 如何从数组列表中添加/删除多个对象
我正在尝试构建一个包含对象的ArrayList。当我向列表中添加一个对象时,我希望它首先检查该对象的数组列表。如果它找到了,我希望它在这个对象中增加一个数量变量,而不是在列表中创建一个新的对象。当移除对象时,反之亦然。我已经完成了一种移除物体的方法。但是我不认为我完全理解arraylist中的方法,或者在创建和arraylist对象时的逻辑。当我使用.contains或.equals时,我没有得到想要的效果Java 如何从数组列表中添加/删除多个对象,java,object,arraylist,Java,Object,Arraylist,我正在尝试构建一个包含对象的ArrayList。当我向列表中添加一个对象时,我希望它首先检查该对象的数组列表。如果它找到了,我希望它在这个对象中增加一个数量变量,而不是在列表中创建一个新的对象。当移除对象时,反之亦然。我已经完成了一种移除物体的方法。但是我不认为我完全理解arraylist中的方法,或者在创建和arraylist对象时的逻辑。当我使用.contains或.equals时,我没有得到想要的效果 public class ItemBag { private ArrayLi
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());
}
}
项目类别
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";
}
}
.contains()方法将遍历列表,并使用.equals()方法比较每个元素,检查列表中是否存在提供的对象
.equals()方法将比较对象引用(除非.equals()被重写),以检查对象是否相同
供参考:
您可以通过以下方式重写.equals()方法来比较所提供对象的值:
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;
}
@Override
public boolean equals(Object object) {
if (this == object) return true;
if (object == null || getClass() != object.getClass()) return false;
Item providedItem = (Item) object;
return name == providedItem.name
&& cost == providedItem.cost
&& type == providedItem.type;
}
}
如果(inventory.get(i).name()==itemName){->发布
项目的代码,这应该可以工作。我的第一个猜测是,您没有实现等于/hashcode
也使用映射,这样您就可以将对象与大小关联potions类当前为空,它扩展了项目。
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;
}
@Override
public boolean equals(Object object) {
if (this == object) return true;
if (object == null || getClass() != object.getClass()) return false;
Item providedItem = (Item) object;
return name == providedItem.name
&& cost == providedItem.cost
&& type == providedItem.type;
}
}