【问题标题】:Write a method to compute all permutations of a string of unique characters编写一个方法来计算一串唯一字符的所有排列
【发布时间】:2014-10-19 19:30:53
【问题描述】:

当我用 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);

     }

}

【问题讨论】:

  • 在哪一行?请添加完整的错误数据

标签: java arraylist indexoutofboundsexception


【解决方案1】:

调用setcopy.remove(element) 将删除位置元素的int。 您没有删除元素本身。如果你想删除元素你必须写setcopy.remove(setcopy.indexOf(element))

编辑:你也可以使用 setcopy.remove(element) 但你必须像这样循环:

for (Integer element : set)

或者你可以这样做:

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

【讨论】:

  • 谢谢!有两种删除方法。 E remove(int index) boolean remove(Object o)
猜你喜欢
  • 1970-01-01
  • 2017-12-12
  • 2013-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 2023-02-04
相关资源
最近更新 更多