2015-05-27 42 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={}; 

我以前從來沒有這樣分配的數組。