2014-10-19 58 views
-1

字符串的所有排列當我與設置,我得到下面的異常5個元素測試:螺紋寫一個方法來計算的獨特角色

異常「主要」 java.lang.IndexOutOfBoundsException:指數:4,大小:2

下面是代碼:

static ArrayList<ArrayList<Integer>> permutation(ArrayList<Integer> set){ 

    ArrayList<ArrayList<Integer>> permutations = new ArrayList<ArrayList<Integer>>(); 

    if (set.size() <= 1) { 
     permutations.add(set); 
     return permutations; 
    } 

    for (int element : set){ 
     ArrayList<Integer> setcopy = new ArrayList<Integer>(); 
     setcopy.addAll(set); 
     setcopy.remove(element); 
     add(permutations, element, permutation(setcopy)); 
    }  
    return permutations; 
} 

static void add(ArrayList<ArrayList<Integer>> permutations, int element, ArrayList<ArrayList<Integer>> setcopy){ 


    for (ArrayList<Integer> al : setcopy){ 
      ArrayList<Integer> p = new ArrayList<Integer>(); 
      p.add(element); 
      p.addAll(al); 
      permutations.add(p); 

    } 

} 
+2

在哪行?請添加完整的錯誤數據 – Mzf 2014-10-19 19:35:35

回答

1

呼叫setcopy.remove(element)將移除INT在位置元素。 您並未移除該元素本身。如果你想刪除的元素,你必須寫setcopy.remove(setcopy.indexOf(element))

編輯:您還可以使用setcopy.remove(元素),但是你必須循環是這樣的:

for (Integer element : set) 

,或者你可以不喜歡它這個:

for (int element : set){ 
    //copy 
    setcopy.remove(new Integer(element)); 
} 
+0

D'oh!接得好! – 2014-10-19 19:41:24

+0

謝謝!有兩種刪除方法。 E remove(int index) boolean \t remove(Object o) – HYJ 2014-10-19 20:14:34

+0

你說得對。我更新了答案。 – user 2014-10-19 20:20:38

相關問題