我在插入排序算法的内部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');
}
}
}
有谁知道如何解决这个问题?
答案 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))