2014-10-19 34 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