给ArrayOutofBounds的排序选择方法

时间:2019-02-14 15:17:19

标签: java

public static void main(String[] args) {
        //create array

    int[] array = {99,45,1,51,11,71,22,33,44,55,32,64,88,76,89};

    System.out.println("Before calling Selection Sort");
    for(int i = 0; i<= array.length-1; i++) {
        System.out.print(array[i]+ " ");
    }
    System.out.println();
    selectionSort(array); //LINE 14

    System.out.println("After calling Selection Sort");
    for(int i=0; i<=array.length-1; i++) {
        System.out.print(array[i]+ " ");
    }
}
public static void selectionSort(int[] array) {
    //finding minimum
    int min=0;

    for(int i=0; i<=array.length-1; i++) {
        min = i;
        for(int j = i+1; i<array.length-1; j++) {
            if(array[j]>array[min]) { //LINE 28
                min = j;
        }
    }
        //swapping
        if(array[i]>min) {
        int temp = array[i];
        array[i] = array[min];
        array[min] = temp;
}

我得到: ArrayIndexOutofBoundsException:15 第28行出现错误, 第14行出现错误。这些问题已解决。现在,数字交换不正确。它们不是按升序排列的。请帮忙!

2 个答案:

答案 0 :(得分:2)

在这部分代码中:

for(int j = i+1; i<array.length-1; j++) { if(array[j]>array[min]) { //LINE 28 min = j; }

您调用array[j],其中j = i + 1i是迭代结束时数组的最后一个元素,因此array[i+1]超出范围。

此外:

for(int j = i+1; i<array.length-1; j++)

必须通过

进行更改

for(int j = i+1; j<array.length-1; j++)

以下是输出正确的版本:

public static void main(String[] args) {
    //create array

    int[] array = {99,45,1,51,11,71,22,33,44,55,32,64,88,76,89};

    System.out.println("Before calling Selection Sort");
    for(int i = 0; i<= array.length-1; i++) {
        System.out.print(array[i]+ " ");
    }
    System.out.println();
    selectionSort(array); //LINE 14

    System.out.println("After calling Selection Sort");
    for(int i=0; i<=array.length-1; i++) {
        System.out.print(array[i]+ " ");
    }
}

public static void selectionSort(int[] array) {
    //finding minimum
    int min=0;

    for(int i=0; i<array.length; i++) {
        min = i;
        for(int j = i+1; j<array.length; j++) {
            if(array[j]<array[min]) { //LINE 28
                min = j;
            }
        }

        //swapping
        if(array[i]>min) {
                int temp = array[i];
                array[i] = array[min];
                array[min] = temp;
        }
    }
}

pdf not generated by itext library from java application

答案 1 :(得分:0)

问题是(int j = i+1; i<array.length-1; j++)产生了一个边界异常,您应该使用j<array.length来代替。试试这个

for(int i=0; i<=array.length-1; i++) {
        min = i;
        for(int j = i+1; j<array.length-1; j++) {
            if(array[j]>array[min]) { //LINE 28
                min = j;
        }