处理arrayList时出现IndexOutOfBoundsException异常



任务描述如下创建数字组合或整数数组排列算法

我决定用这种方式解决这个问题:从第一个数字到最后一个数字检查排列的可能性:

创建第一个排列和差值

的数组

del1rem0

Bool是具有两个参数的对象:st - start和end

这是新的排列

我创建了一个新的Bool,在开始有相同的开始和结束,就像它是一个数字。所以,在用另一个起始数开始新的排列之前我们不能再用这个数了。然后我们把它从数字列表rem中移除。并开始创建与检查排列。

for (int index = 0; index < arr.length; index++) {
            List<Integer> del1 = new ArrayList<Integer>();
            List<Integer> rem0 = new ArrayList<Integer>();
            for (int i = 0; i < del.length; i++) {
                del1.add(del[i]);
            }

            for (int i = 0; i < arr.length; i++) {
                rem0.add(arr[i]);
            }

            Bool start = new Bool(arr[index], arr[index]);
            rem0.remove(index);
            check(start, del1, rem0);

        }
检查:

ucet -"好"排列的个数,如果新排列的差值相同,则与第一个相同,为"好"。

因此,对于结束数,我添加差异数,如果它=可能数列表中的数字-我将该数字添加到排列的末尾,从可能列表中删除它,并从差异列表中删除差异(通过创建新列表)。然后继续创建

private static void check(Bool start, List<Integer> del2, List<Integer> rem) {
        if (del2.isEmpty()) {
            ucet++;

        }
        for (int index = 0; index<rem.size(); index++) {
             for (int i = 0; i<del2.size(); i++) {
                if(start.end+del2.get(i)==rem.get(index)){
            List<Integer> del3 = new ArrayList<Integer>();
            List<Integer> rem2 = new ArrayList<Integer>();
            del3=del2;rem2=rem;
            Bool con=new Bool(start.st,rem.get(index));
                    rem2.remove(index);
                    del3.remove(i);
                    check(con,del3,rem2);
                }

            }
        }

    }

但我有一个bug,我不能理解。是IndexOutOfBoundsException。在字符串if(start.end+del2.get(i)==rem.get(index)){

导致del2.get(i)

但问题是,i<del2.size()

你能帮我处理一下吗?由于

当您循环遍历列表时,您正在从列表中删除实体,这很不好。您可以尝试将while循环与iterable.hasNext()结合使用,或者使用rem0.set(index, null)代替rem0.remove(index)

最新更新