2015-05-27 13 views
-6

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

编写一个名为henry的方法,它接受两个整数参数i和j并返回第i个和第j个完美数字的总和。举例来说,henry(1,3)应该返回502,因为6是第一个完美数字,496是第三个完美数字并且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

请张贴确切的例外。它应该告诉你'j'的价值。另外,请将参数添加到产生异常的调用中。 – Turing85

+0

当然,索引超出范围。数组长度为0!没有索引可能会在界限!你为什么不使用这个列表? – user2357112

+3

你的数组总是空的,据我所知 - 所以没有数组访问表达式,*不会抛出异常... –

回答

1
int[] temp = {}; 

这将设置温度为0元素的数组。因此,当您尝试访问索引= 0时的temp [index],因为数组甚至没有单个元素,所以当访问temp [index]时

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

int[] temp = new int[x]; 

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

1

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

int[] temp = {}; 

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

temp[index] = j; 

这会尝试在temp阵列中放置某些东西。但是,正如我所说的,该阵列是空的,其长度为零,因此任何值index都会超出范围。

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

0

尝试做

int[] temp=new int[i]; 

代替

int[] temp={}; 

我以前从来没有这样分配的数组。