2014-10-21 2 views
0

를 컴파일하면 내 코드를 넣고이며, 어떤 오류를 보여 나던 컴파일러하지만 그것을 실행 wheneveri, 내가 "주"스레드에서 예외 "이 오류를 얻을 수은 이렇게 여기에서 확인 거품 정렬 오류

java.lang.ArrayIndexOutOfBoundsException: 5 
at BubbleSort.bubblesort(BubbleSort.java:18) 
at BubbleSort.main(BubbleSort.java:8)" 

---- ------------------------암호------------------------- --------------------------

public class BubbleSort { 

    static int[] numbers = { 5, 8, 14, 1, 5678 }; 

    public static void main(String[] args) { 
     BubbleSort bb= new BubbleSort(); 
     bb.bubblesort(numbers); 
     bb.printArray(numbers); 



    } 
    static void bubblesort(int[] arr){ 
     int temp; 
     for(int i=0;i<arr.length;i++){ 
      for(int j=0;j<(arr.length-i);j++){ 
       if(arr[j]>=arr[j+1]){ 


        temp=arr[j]; 
        arr[j]=arr[j+1]; 
        arr[j+1]=temp; 
        } 

      } 
     } 
    } 
    public void printArray(int[] arr){ 

     for(int i:arr){ 
     System.out.println(i); 
     } 

    } 
} 
+0

설명을 주신 모든 분들께 감사드립니다 ... – user3500147

답변

0

변화는 두 번째 조건 -1 될 : 반복에 대한

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

이유는 I = 0이 arr.length + 여기서 1 (경우 (도착 [J]> = 도착 [J에서 +까지 순회 갈 1]) {)

또한 (버그는 아니지만 경고와 함께) bublesort를 정적으로 정의하고 인스턴스를 통해 액세스했습니다. 너는 바꿀 수있어?

+0

wow didnt는 그 사실을 깨달았습니다. – user3500147

+0

또한 printArray()를 인스턴스로 정의했습니다. 그것은 쉽게 정적 메서드가 될 수 있으며 BubbleSort의 인스턴스를 전혀 필요로하지 않습니다. – chama

0

이 오류는 배열 범위를 벗어나는 인덱스에 액세스하고 있음을 의미합니다. 회선에서 오류가 발생합니다.

if(arr[j]>=arr[j+1]) 

i=0의 경우 j은 0에서 arr.length-1까지 다양합니다. 따라서 j + 1은 1에서 arr.length까지 다양합니다. arr[arr.length]은 범위를 벗어난 오류를 발생시킵니다.

0

외부 루프의 첫 번째 실행에서 i = 0; 따라서 arr.length-i = array.length = 5. 내부 루프 j = 4의 마지막 반복에서. 따라서 j + 1 = 5이고 인덱스 5의 배열 요소를 참조하려고하면 예외가 발생합니다.