2014-04-28 24 views
-2

我正在做一個代碼,使一些字符串中的一些獨特的整數,我突然遇到了一個異常,我不明白這裏的問題是什麼,因爲我幾乎完成。現在發生了什麼,我不知道。Java字符串索引超出邊界同時作出字符串

這裏是我的代碼:

String[] res = new String[12]; 
     int[] ia = {1, 6, 9}; 
     int[] ai = {97, 79, 8}; 
     int[] a = new int[10]; 
     for(int i = 0; i < a.length; i++){ 
      a[i] = (ia[new Random().nextInt(3)]^(ai[new Random().nextInt(3)] * i)); 
      for(int j = 0; j < res.length; j++){ 
       if(a[i] >= j){ 
        res[j * i] = "J:" + (a[i] * a[new Random().nextInt(10)]); //exception 
       } else if(a[i] <= j){ 
        res[j * i] = "J:" + (-(a[i] * a[new Random().nextInt(10)])); 
       } 
      } 
     } 

這裏是拋出的異常:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 12 
    at testy.main(unique.java:15) 
+0

陣列的極限是基於*零*。您正在訪問第13個元素。尋找這個許多dups之一。 –

+3

這段代碼有這麼多的錯誤,我甚至找不到一個好的代碼行,除了數組的聲明.... –

+0

@MatejSpili說什麼。首先,你不應該創建像這樣的新Random()對象。你最終會得到無數次完全相同的數字。在循環開始時創建一個,並在那裏使用相同的一個。 –

回答

0

看i和j的最大值。您會看到res [j * i]將超出您爲其分配的空間,因此超出範圍例外

0

在您的第一個中,您將從0到9(a.length = 10)。在第二個你從0到11(res.length = 12)。

j*ires[j * i]將超過RES(12)的2的簡單值和10