2013-05-01 47 views
2

我寫了我的排序問題如下,但我得到一個ArrayIndexOutOfBounds異常。 ,我無法弄清楚。 plz幫助。ArrayIndexOutOfBounds排序

System.out.println("Enter the total no of digits to sort:- "); 

n = Integer.parseInt(br.readLine()); 
x = new int[n]; 

System.out.println("Enter the elements:- "); 

for(i = 0; i < n; i++) 
    x[i] = Integer.parseInt(br.readLine()); 

for(i = 0; i < n; i++) 
{ 
    for(j = 0; j < n; j++) 
    { 
     if(x[j] > x[j+1]) //ascending order 
     { 
      temp = x[j]; 
      x[j] = x[j+1]; 
      x[j+1] = temp; 
     } 
    } 
} 
+0

那麼什麼是X []的大小? – Aquillo 2013-05-01 12:59:50

+0

x的大小在運行時期間被初始化。 – jhe 2013-05-01 13:05:14

+0

是的,我的問題不再相關,因爲您的更新提供了答案。 – Aquillo 2013-05-01 13:07:35

回答

4

由於j上升到nj+1是出界。您需要將其更改爲

for(j=0;j<n-1;j++) 

這樣做將確保x[j+1]是範圍之內。

+0

非常感謝.. :))...它的工作... :) – jhe 2013-05-01 13:06:16

+0

我在netbeans中做了相同的程序n GT錯誤說...「java.lang.NoClassDefFoundError:javaapplication3/Main 線程中的異常」main 「Java結果:1」........幫助這個plz。 – jhe 2013-05-01 13:11:33

+0

@jhe這可能是您的netbeans項目配置的一個問題。這裏是[相關討論鏈接](http://stackoverflow.com/q/2702185/335858)。 – dasblinkenlight 2013-05-01 13:23:57

0

錯誤是在這裏:

if(x[j] > x[j+1]) { 
.... 

因爲j+1等於n

使這一變化:

for(j=0;j + 1<n;j++) { 
    ... 
+0

Nop,'j + 1'是最後一個循環的'n'。雖然在設置'int [n]'時,最後一個索引是'n - 1'。所以'int [n]'或者它在最後一個循環'int [j + 1]'上的等價物將會outOfBound。 *示例*:int [4]創建鍵{0,1,2,3} – Aquillo 2013-05-01 13:08:43