JAVA ArrayIndexoutofBoundException问题

时间:2015-05-27 20:49:59

标签: java arrays

完美数字是其因子的总和,不包括其自身。第一个完美数字是6,因为6 = 1 + 2 + 3.第二个完整数字是28,等于1 + 2 + 4 + 7 + 14.第三个是496 = 1 + 2 + 4 + 8 + 16 + 31 + 62 + 124 + 248.在每种情况下,该数字是排除其自身的所有因素的总和。

编写一个名为henry的方法,它接受两个整数参数i和j,并返回第i个和第j个完美数字的总和。因此,例如,亨利(1,3)应该返回502,因为6是第1个完整数字,496是第3个完整数字,6 + 496 = 502。

我已经完成了这个::但是这行显示了ArrayIndexOutOfBoundException temp [index] = j; 请帮我解决这个OutOfBound问题,谢谢..

public static int henry  (int a, int b){

    List<Integer> arr = new ArrayList<Integer>();
    int henryNumber = 0;

        for(int i=4;;i++){
            List<Integer> temp = new ArrayList<Integer>();
            int sum = 0;

            for(int j = 1; j<i; j++){
                if(i%j == 0 ) { temp.add(j); }
            }

            for (Integer item : temp) { sum+=item; }

            if(sum == i) arr.add(i);

            if(arr.size() == b) {
                henryNumber = arr.get(a-1) + arr.get(b-1);
                break;
            }
        }

    return henryNumber;
}

3 个答案:

答案 0 :(得分:1)

int[] temp = {};

这将temp设置为0个元素的数组。因此,当您尝试访问其中index = = 0的temp [index]时,它超出范围,因为该数组甚至没有单个元素

您需要通过执行以下操作来创建x数字元素的数组:

int[] temp = new int[x];

然后你可以将每个指标的值设置为你想要的任何值。

答案 1 :(得分:1)

数组一旦创建就具有固定长度,并且该长度不能更改。

int[] temp = {};

这会创建一个空数组。它的长度为零。你不能改变它,你不能添加任何项目。

temp[index] = j;

这会尝试将某些内容放入temp数组中。但是,正如我所说,数组为空,其长度为零,因此index的任何值都将超出范围。

使用List(在您的来源中注释掉)将允许您创建不断增长的元素集合。或者,您必须考虑适合您的阵列的大小,它将包含您将使用的所有元素,并在创建阵列时使用该大小。

答案 2 :(得分:0)

尝试

Derived

而不是

    int[] temp=new int[i];

我以前从未分配过这样的数组。