我在实现InsertionSort
时无法获得输出package app;
public class InsertionSortDemo {
public static void insertionsort1(int A[]) {
int i,j,v;
for(i=2;i<=A.length-1;i++) {
v=A[i];
j=i;
while(A[j-1]>v && j>=1) {
A[j]=A[j-1];
j--;
}
A[j]=v;
}
}
public static void main(String s[]) {
int ar[]={6,8,1,4,5,3,7,2};
insertionsort1(ar);
}
}
输出显示:
线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:-1
在app.InsertionSortDemo.insertionsort1(InsertionSortDemo.java:11)
在app.InsertionSortDemo.main(InsertionSortDemo.java:23)
答案 0 :(得分:2)
问题在于:
while(A[j-1]>v && j>=1)
Java中的条件从左到右进行评估。因此,当j
的值为0
时,您将访问A[-1]
,从而导致异常。
只需更改验证while
循环的方式:
while(j>=1 && A[j-1]>v)