2013-09-24 20 views
0

我有這樣的陣列循環來檢查字符串數組項

public static ArrayList<String> inventory = new ArrayList<String>(); 

,並有存儲的它裏面的玩家項目。

我想添加一個功能,將銷售除鎬之外的所有東西,我如何創建一個循環來檢查數組中除「鎬」之外的其他東西,以及是否有刪除它?

要刪除我有一個空隙

public void removeAllInventory() { 

    inventory.clear(); 

} 

public void removeInventory(String item) { 

    inventory.remove(item); 

} 

難道我只是編輯removeAllInventory忽略鐵鎬,創建一個名爲removeAllShop或新的東西空虛嗎?如果是這樣的話,會發生什麼呢?

這是我需要把它放在:

else if (input.input.equalsIgnoreCase("all")) { 


} 

回答

1

不應編輯removeAllInventory()去除一切,但鎬頭。它的名字將不再有意義,而且這似乎是一個合理的常規。

但是,您可以添加一種新方法,即removeAllInventoryExcept(String item),該方法除去給定項目之外的所有內容。

希望這會有所幫助。

編輯:在試圖以加強這個答案,我也想建議的「開箱即用」的解決方案:

public void removeAllInventoryExcept(String item) { 
    ArrayList<String> newInv = new ArrayList<String>(); 
    newInv.add(item); 
    inventory = newInv; 
} 

這就避免了昂貴的迭代和字符串比較。

+2

難道真的不值得評論嗎?它不能解決問題。 –

+0

我會在新方法中做些什麼來使其真正起作用? – user2809361

+0

我同意保持您的代碼儘可能自我記錄是保持您的理智的好方法。更改removeAllInventory的功能將使您的代碼的路徑開始順利......第三方可以理解這一點。 – user2366842

2

在列表上循環,檢查每個元素是否等於鎬,如果不是,則將其刪除。

Iterator<String> i = inventory.iterator(); 
while (i.hasNext()) { 
    if (i.next().equalsIgnoreCase("pickaxe")) 
    i.remove() 
} 
+0

請注意,使用沒有迭代器的for循環將導致java.util.ConcurrentModificationException。 –

0

我假定庫存中的所有商品都是商品類的祖先,而不僅僅是一個字符串。

您可以循環訪問ArrayList,獲取每個元素的名稱並將其與pickaxe名稱進行比較。

你可以通過ArrayList中循環和檢查,如果每個項目是instanceof 鎬頭,如果不是這樣,從ArrayList中

編輯*看來你指定的ArrayList是刪除字符串類型,所以忽略第二個選項

0
for (String item : inventory) { 
    if (!"pixckaxe".equalsIgnoreCase(item)) { 
     inventory.remove(item); 
    } 
} 
+0

此代碼將導致java.util.ConcurrentModificationException。不使用! –