插入排序给定数组越界错误

时间:2014-09-28 15:54:29

标签: java arrays

我在插入排序算法的内部while循环中遇到错误。这是我的代码:

import java.io.*;

public class insetionSort {

    public static void main(String args[]) throws IOException {
        int A[] = new int[100];
        int n;
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        n = Integer.parseInt(br.readLine());

        for(int i=0;i<n;i++) {
            A[i] = Integer.parseInt(br.readLine());
        }

        int i,j,v;

        for (i = 2;i < n-1;i++) {
            v = A[i];
            j = i;

            while((A[j-1]>v)&&(j>=1)) /*Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1*/
            {
                A[j] = A[j-1];
                j--;
            }

            A[j] = v;
        }

        for(i=0;i<n;i++)
            System.out.print(A[i]+'\t');
        }
    }
}

有谁知道如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

应该从

更改条件
    while((A[j-1]>v)&&(j>=1)) 

    while((j>=1)&&(A[j-1]>v)) 

否则,A[j-1]可能会对j==0进行评估。

答案 1 :(得分:2)

while ((A[j-1] > v) && (j >= 1)) {
    A[j] = A[j-1];
    j--;
}

布尔表达式从左到右进行计算。因此,当j变为0时,A[j - 1] > v首先在j >= 1之前进行评估。因此它抛出异常。

简单地阅读信息会给你一个很大的暗示:

ArrayIndexOutOfBoundsException: -1

所以你知道问题是你正在访问数组中的无效索引,并且这个无效索引是-1。

使用

while ((j >= 1) && (A[j-1] > v))