1 回答

TA貢獻1859條經驗 獲得超6個贊
我可能誤解了這個問題,但我猜你想將 Inventory 轉換為使用ArrayList,而不是將其轉換為ArrayList。那是對的嗎?
如果我正確理解了這個問題,那么您要做的第一件事就是將字段的聲明更改inventory
為 ArrayList:
private List<FoodItem> inventory;
請注意,我已將其聲明為 List 接口,而不是具體的 ArrayList 實現。除非您需要的 ArrayList 實現的特定功能在通用接口中不可用,否則通常最好在通用接口級別進行操作,以便為自己提供最大的靈活性。
但是,在構造函數中,您實際上將實例化具體的 ArrayList:
public Inventory() { inventory = new ArrayList<>(20); }
通過從裸數組切換到 ArrayList,您將發現使用 Collection 的第一個優點,因為您將不再需要該方法alreadyExists()
。List 及其超級接口 Collection 支持該contains()
方法。
這:
if(alreadyExists(item)<0)
變成:
if (!inventory.contains(item))
...并且您可以刪除該alreadyExists()
方法。
第二個優點是您不再需要將庫存中的商品數量作為單獨的字段進行跟蹤。List 已經為您提供了這一點。
這:
if(numItems == 20)
變成:
if (inventory.size() == 20)
..并且您可以numItems
從班級中刪除該字段。
第三個優點是列表/集合支持toString()
與上面的實現非常相似的。
這:
@Override
public String toString() {
String returnString = "Inventory:\n";
for(int i=0;i<numItems;i++)
returnString += inventory[i].toString() + "\n";
return returnString;
}
變成:
@Override
public String toString() {
return "Inventory:\n" + inventory.toString();
}
toString() 和 List 提供的 toString() 之間的主要區別在于每個項目之間有換行符,而 List 只是在每個項目之間放置逗號。如果你想保留新行,那么列表/集合上的循環比數組稍微麻煩一點:
@Override
public String toString() {
String returnString = "Inventory:\n";
for(FoodItem item : inventory) {
returnString += item.toString() + "\n";
}
return returnString;
}
添加回答
舉報