数组排序获取错误

时间:2016-09-02 10:34:45

标签: java arrays sorting

class arr{
//array sorting to find maximum value
public static void main(String[]args){
    int[] array={1,6,4,5,2};
    int n;
    int i,j;
    for( i=0;i<(array.length*2);i++){
        for( j=0;j<array.length;j++){
            if(array[j]>array[j+1]){
                array[j]=array[j+1];
                array[j+1]=array[j];
            }
        }
    }
    System.out.println(array[array.length]);
}

}

&GT;     任何人都可以告诉我为什么我会收到运行时错误,这种排序方法是否有效?

  

4 个答案:

答案 0 :(得分:2)

不要重新发明轮子..,你可以使用数组,所以然后使用数组帮助类... : - )

public static void main(String[] args) {

    final int[] array = { 1, 6, 4, 5, 2 };
    System.out.println("Array before sort " + Arrays.toString(array));
    Arrays.sort(array);
    System.out.println("Array before sort " + Arrays.toString(array));
}

答案 1 :(得分:0)

您可能会遇到indexOutOfbounds异常,因为您的第二个循环:

for( j=0;j<array.length;j++){
        if(array[j]>array[j+1]){
            array[j]=array[j+1];
            array[j+1]=array[j];
        }
}

J遍历teh数组然后你试图在J + 1索引数组,该数组在数组的最后一个元素上将它推出边界,从而抛出outOfBoundsException

答案 2 :(得分:0)

for( j=0;j<array.length;j++){
  if(array[j]>array[j+1]){
               array[j]=array[j+1];
               array[j+1]=array[j];
           }
 }
  1. 由于array.length = 5且j&lt; array.length,内部循环的最后一轮中的值数组[j + 1]导致数组超出绑定异常。

  2. 在更改之前,交换需要另一个变量来保存数组[j]。

  3. e.g:

    int x;
    
        for( j=0;j<array.length - 1;j++){
    
          if(array[j]>array[j+1]){
                        x = array[j];
                        array[j]=array[j+1];
                       array[j+1]=x;
                   }
     }
    

答案 3 :(得分:0)

冒泡排序算法可以按如下方式实现

 public static void sort(int[] arr){

        int len = arr.length;

        int k = 0;
        for(int j = 0 ; j < len-1; j++){
        for(int i= 0+k; i < len-1; i += 2){

            if(arr[i] <= arr[i+1])
                continue;
            int tmp = arr[i];
            arr[i] = arr[i+1];
            arr[i+1] = tmp;
        }
        k++;

        if ( k % 2 == 0)
            k = 0;
    } }

内循环必须交替从索引0和1开始,以便不总是交换相同的对(k变量)。

其他人已经指出了你为什么会有例外。