我有一个库存类,它有一个名为Item的类Item。在Item类中,我有一个名为quantity的int值来表示每次拾取获得的项目数量。我一直无法弄清楚如何获得数组中重复项的数量,这样我就可以用该项的getQuantity()方法乘以该项,并获取玩家正在携带的物品的总数量。如何识别数组中重复对象的数量
public class Inventory {
private Item[] items; //A private Item array, called items
private int firstFree;
private int quantity;
private WorldRenderer world;
/**
* CREATES THE INVENTORY AT A SIZE SPECIFIED IN THE PARATHENESIS
*/
public Inventory(int size) {
items = new Item[size];
firstFree = 0;
}
public int getItemCount() {
for (int i = firstFree; i < items.length; i++) {
if (items[i] != null) {
return items.length;
}
}
return 0;
}
public boolean add(Item item) {
if (firstFree == items.length) {
return false;
}
items[firstFree] = item;
for (int i = firstFree; i < items.length; i++)
if (items[i] == null) {
firstFree = i;
return true;
}
firstFree = items.length;
return true;
/**for (int i = 0; i < items.length; i++)
if (items[i] == null){
items[i] = item;
System.out.println("Item " + item.getName() + " added to inventory at index " + i); // TESTING
return true;
}
return false;
}**/
}
public Item get(int index) {
return items[index];
}
public void setQuantity(Item item, int quantity) {
for (int i = 0; i < items.length; i++) {
if (items[i] == item) {
items[i].setQuantity(quantity);
}
}
}
public void removeQuantity(Item item, int quantity) {
for (int i = 0; i < items.length; i++) {
if (items[i] == item) {
items[i].setQuantity(item.getQuantity() - quantity);
}
}
}
public int getQuantity(Item item) {
int quantity = 0;
for (int i = 0; i < items.length; i++) {
if (items[i] == item) {
quantity = items[i].getQuantity();
}
}
return quantity;
}
}
也许有更好的方法去创建我的特定问题的清单?
编辑: 试图HashMap中并且在该行
if (items.containsKey(item)){
Integer previousQuantity = items.get(items);
items.put(item, ++previousQuantity); // NPE this line.
} else {
items.put(item, 1);
}
是否将您的代码更改为'quantity + = items [i] .getQuantity();'产生预期结果?如果不是,你目前得到的预期结果和结果是什么? –
你怎么知道'Item'是否是重复的?您似乎没有任何字段(例如带有“Item”名称的字符串)可以做出该决定。 –
您可能会发现先用非代码语言描述问题很有用。然后将其转换为伪代码。这样做可能会帮助您了解a所需的逻辑,并选择您的目标。同时有些想法:是什么让项目重复?你的setQuantity和removeQuantity方法正在测试它是否是相同的实例,是否正确?您的getItemCount将返回总数组大小或只有0 – Romski