Java 使用arrayList时的IndexOutOfBoundsException

Java 使用arrayList时的IndexOutOfBoundsException,java,algorithm,permutation,indexoutofboundsexception,Java,Algorithm,Permutation,Indexoutofboundsexception,此处或此处描述了任务 我决定用这种方式解决这个问题: 从第一个数字到最后一个数字,检查排列的可能性: 创建第一个排列和差异的数组列表 del1和rem0 Bool是一个具有两个参数的对象:st-start和end 这是一种新的排列方式 我创建了一个新的Bool,在开始时有相同的开始和结束,就像它是一个数字一样。所以,在开始新的排列之前,我们不能再使用这个数字了。我们将其从数字列表中删除rem。并通过检查开始创建置换 for (int index = 0; index < arr.lengt

此处或此处描述了任务

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

创建第一个排列和差异的数组列表

del1
rem0

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);


        }
但我有一个错误,我不能理解。它的
索引OutofBoundsException
。在字符串
if(start.end+del2.get(i)=rem.get(index)){

它导致
del2.get(i)


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

i1 4 2 5 7 6 9 8 3
和第一个差异
3-2 3 2-1 3-1-5 1
检查它。异常是
线程“main”中的异常java.lang.IndexOutOfBoundsException:Index:2,Size:2
您正在从当前循环的列表中删除元素假设我创建新列表时正在处理它,是吗?
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);
                }


            }
        }


    }