2015-10-18 53 views
0

我想創建一個方法,通過'數據'數組搜索參數'elt'。如果存在,則該方法將其刪除。我無法弄清楚如何刪除字符串「elt」。以下是我到目前爲止。如何糾正我的方法,以便它從數組中刪除字符串?

public class Bag<T> implements Iterable<T> { 

private final int MAXLEN = 3; 
private int size; 
private T[] data; // array 

public T remove(T elt) { 

    for (T word : data) { 
     if (word == "elt") 
      data = data.remove(word); 
     } 
    }  
} 

我得到的錯誤是從陣列ELT‘?

「不能在數組類型T []。

誰能告訴我我怎麼能正確地刪除字符串中刪除(T)’

+0

數組的大小是固定的,所以您需要重新創建一個並將內容填充到其中。例如,你可以看看'System.arraycopy'。也不要將String的內容與'=='進行比較,使用'equals'。 –

+0

..或簡單地使用'ArrayList' ... –

+0

這看起來像是一個'ArrayList'的實現。如果你想從一個數組中移除一個元素,你必須將所有具有較高索引的元素移動一個索引。和:比較字符串是通過'someString.equals(otherString)'完成的。 '=='只能用於原始類型 – Paul

回答

2

data是一個數組,所以你不能在你正在嘗試做的意義刪除

您有幾種選擇:

  1. 設置元件爲null
  2. (1)和移動其它元件向下
  3. 使用一個Collection(如ArrayList) - 然後可以去除,只要你願意

選項(3)將是最簡單的。如果你需要使用一個數組,(1)看起來是這樣的:

for (int i=0; i<data.length; i++) { 
    if ("elt".equals(data[i]) { 
     data[i] = null; 
    } 
} 
2

從陣列中你不能「刪除」的值:你不能改變數組中元素的個數一旦被創建。

但是,您可以更改元素的值,例如,將其設置爲null。爲了做到這一點,你需要元素的索引,所以你不能使用增強的for循環。

如果您想要一個可變大小的容器,請使用可變的List(例如, ArrayList。那麼你可以簡單地使用list.remove("elt"),不需要顯式的循環。另外:使用"elt".equals(word)而不是word == "elt"