编译bubblesort错误

时间:2014-10-21 17:23:42

标签: java sorting compilation

好的所以这里是我的代码,编译器没有显示任何错误,但每当我运行它时,我得到这个错误"线程中的异常" main"

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);
       }

   }
}

3 个答案:

答案 0 :(得分:0)

此错误表示您正在访问超出数组范围的索引。错误发生在该行:

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

请注意i=0j的范围从0到arr.length-1不等。因此j + 1从1到arr.length不等。 arr[arr.length]抛出越界错误。

答案 1 :(得分:0)

将第二个条件改为-1:

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

迭代的原因i = 0它会迭代到arr.length + 1(这里if(arr [j]&gt; = arr [j + 1]){)

另外(不是与bug有关,而是警告)你将bublesort定义为静态并通过实例访问。你可以改变吗?

答案 2 :(得分:0)

在外循环的第一次运行中,i = 0;因此arr.length-i = array.length = 5.在内部循环的最后一次迭代中j = 4.因此j + 1 = 5并且当您尝试引用索引为5的数组元素时,您将获得异常。