完美数字是其因子的总和,不包括其自身。第一个完美数字是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;
}
答案 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];
我以前从未分配过这样的数组。