繁体   English   中英

使用arrayList时IndexOutOfBoundsException

[英]IndexOutOfBoundsException when working with arrayList

在此处创建数字组合或在此描述整数数组的置换

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

创建第一个排列和差异的arraList

del1rem0

Bool是具有两个参数的对象: st开始和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);
                }


            }
        }


    }

但是我有一个我无法理解的错误。 IndexOutOfBoundsException 在字符串if(start.end+del2.get(i)==rem.get(index)){

并导致del2.get(i)

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

你能帮我解决吗? 谢谢

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM