2014-09-24 58 views
-1

我只想按排序方法對數組進行排序。但不幸的是它拋出一個錯誤:ArrayIndexOutOfBoundsException排序數組時

java.lang.ArrayIndexOutOfBoundsException:10 at Search.sort(Search.java:30) at Search.main(Search.java:67)

這裏是我的代碼:

import java.util.Scanner; 

public class Search { 

    public Search() { 
    System.out.println("inside a constructer"); 
    } 

    public int[] sort(int x[]) { 

    for (int i = 0; i < x.length - 1; i++) 
     for (int j = 1; j < x.length; j++) { 
     int temp; 

     if (x[i] > x[j]) { 
      temp = x[i]; 
      x[i] = x[j]; 
      x[j] = x[i]; 

     } 

     } 
    return x; 
    } 

    public static void main(String[] args) { 
    // System.out.println("fgdg"+num); 

    int num[] = new int[10]; 

    Scanner sc = new Scanner(System.in); 

    System.out.println("Eneter the 10 integers:"); 

    for (int i = 0; i < 10; i++) { 
     System.out.println("Enter the " + (i + 1) + " number:"); 
     num[i] = sc.nextInt(); 
    } 

    System.out.println("before sorting:"); 
    for (int m = 0; m <= num.length; m++) 
     System.out.println(num[m]); 

    Search obj = new Search(); 
    int x1[] = obj.sort(num); 

    System.out.println("sorted:"); 

    for (int k = 0; k <= x1.length; k++) 
     System.out.println(x1[k]); 
    } 
} 
+0

嘿,夥計伊茨沒有一個重複的問題 – rydz 2014-09-24 08:39:28

回答

1
int num[] = new int[10] 

意味着你的陣列有10個元素(長度= 10),索引從0 - 9

變化for循環的方法中,以

for (int i=0;i<x.length;i++) 
    for(int j=i+1;j<x.length;j++) 

!!改變每循環那去

<= array.length 

< array.length 

因爲數組中的最後一個元素是在指數array.length - 1

您還可以在您更改排序函數x [i]和X [J]的值是錯誤的。它應該是:在排序方法

if (x[i] > x[j]) { 
     temp = x[i]; 
     x[i] = x[j]; 
     x[j] = temp; 

    } 

你的j循環已經開始從i + 1,而不是從1

+0

我有做了一些更改再次無法正常工作.. – rydz 2014-09-24 08:40:21

+0

也改變之前/之後在主排序循環 – DeiAndrei 2014-09-24 08:42:17

+0

@Rameez我剛剛運行你的代碼並編輯我的答案,現在你應該設法使其工作。 – DeiAndrei 2014-09-24 08:53:56

1

改變你的條件是:

for (int i=0;i<x.length;i++) 
    for(int j=1;j<x.length;j++){ 
     //your code 
    } 
} 

你的代碼的作用:它檢查每從索引0到數組大小的數組中的數字。

假設你有array of 10 numbers。然後數組的大小將爲10。你正在迭代from 0 to 10。但是數字存儲在索引位置0 to 9。所以當它嘗試從數組中獲取第10個元素時會引發異常。

+0

這並不工作...我認爲這是在最後一行obj.sort(NUM)問題 – rydz 2014-09-24 08:36:40

1

數組索引是從零開始的。 更改

for (int i=0;i<=x.length;i++) 
    for(int j=1;j<=x.length;j++) 

for (int i=0;i<x.length;i++) 
    for(int j=i;j<x.length;j++) 

UPDATE:

兩個更多的地方。更改<=<

for (int m = 0; m <= num.length; m++) 
     System.out.println(num[m]); 

for (int k = 0; k <= x1.length; k++) 
     System.out.println(x1[k]); 
+0

改變了它...但不能再次工作... PLZ再次檢查代碼,因爲我做了一些改變 – rydz 2014-09-24 08:44:26

+0

順便說一句,你的'臨時'變量被分配,但沒有使用。這是一個錯誤。 – ponomandr 2014-09-24 08:56:30

0
for (int i=0;i<=x.length;i++) 
     for(int j=1;j<=x.length;j++) 
    { 
     int temp=0; 

     if(x[i]>x[j]) 
     { 
      temp=x[i]; 
      x[i]=x[j]; 
      x[j]=x[i]; 

     } 


    } 

應該

for (int i=0;i<x.length;i++) 
     for(int j=1;j<x.length;j++) 
    { 
     int temp=0; 

     if(x[i]>x[j]) 
     { 
      temp=x[i]; 
      x[i]=x[j]; 
      x[j]=temp; 

     } 


    } 

您已超出數組的大小!

0

for循環改變你的這段代碼:

for (int i=0;i<x.length;i++) 
    for(int j=i;j<x.length;j++)