2011-09-07 48 views
0

如何使用Java中的遞歸從數組中刪除?如何使用Java中的遞歸從數組中刪除

該數組可以在任何長度和任何整數。

你可能不使用循環(同時,對等)

例如

[2][4][2][0][9] 

應打印(2 4 0 9)

感謝您的幫助

+3

到目前爲止您嘗試過什麼? (這看起來像功課,如果是這樣,請標記爲這樣) – Mat

+3

什麼元素應該被刪除?隨機的?你必須更加明確。 –

+1

什麼是要刪除?重複?請改進問題。如果是的話,你也許會說colour也是作業。 –

回答

4

你不能從Java中的數組中刪除元素。不適用於遞歸,不適用於循環。

2

我假設在這裏你實際上並不想刪除元素[如@aioobe提到的,不能這樣做],但你真的想:「打印陣列中的所有元素,沒有重複」。 [我從例子中假設它,你提到你想打印指定的輸出]。

執行此操作的方法是維護一個包含您已經遇到的所有元素的Set,並且當且僅當您遇到它並且它不在集合中時纔打印元素。

遞歸部分可能是:總是處理i元素(arr[i]),並停止時 i == arr.length。不要忘記在每次遞歸調用中增加i。

應該是這個樣子的是:

public static void printNoDupes(int[] arr,int i,Set<Integer> seen) { 
    if (i == arr.length) return; 
    if (!seen.contains(arr[i])) { 
     System.out.print(arr[i] + " "); 
     seen.add(arr[i]); 
    } 
    printNoDupes(arr,i+1,seen); 
} 
public static void printNoDupes(int[] arr) { 
    printNoDupes(arr,0,new HashSet<Integer>()); 
    System.out.println(); 
} 
+0

如果使用'Set',則所需的全部是'System.out.println(new HashSet (Arrays.asList(new Integer [] {2,4,2,0,9}))。toString() );' – MarcoS

+0

@MacroS:true,但OP特意要求遞歸解決方案。 – amit

1

排序的數組,然後使用遞歸如果是一樣的,表示前一個唯一元素的元素以前發現的元素/參數刪除元素。

正如其他人所說,你不能從原始數組中刪除元素,你需要將應該保留的元素複製到一個新的數組中。

+0

「...你需要將應該保留的元素複製到一個新數組中」 - 但是這個數組有什麼維度? – obfuscation

+0

您可以初始化新數組的大小與原始數組的大小相同,並使用某個特殊元素來指示其結束,也可以使用該函數的第一次調用來計算唯一元素,然後分配一個具有該大小的新數組,然後存儲唯一元素到第二次調用中的新數組。 –