我有这个代码用于插入排序,它无法为测试用例提供输出。
import java.io.*;
import java.util.*;
public class Solution {
public static void insertionSortPart2(int[] ar)
{
// Fill up the code for the required logic here
// Manipulate the array as required
// The code for Input/Output is already provided
int n =ar.length;
for(int i=1;i<n;i++)
{int k= ar[i];
int j=i-1;
while(ar[j]>k && j>-1)
{
ar[j+1]=ar[j];
j--;
}
ar[j+1]=k;
printArray(ar);
}
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int s = in.nextInt();
int[] ar = new int[s];
for(int i=0;i<s;i++){
ar[i]=in.nextInt();
}
insertionSortPart2(ar);
}
private static void printArray(int[] ar) {
for(int n: ar){
System.out.print(n+" ");
}
System.out.println("");
}
}
不返回输出的测试用例是 9 8 6 7 3 5 4 1 2
错误:线程&#34; main&#34;中的异常java.lang.ArrayIndexOutOfBoundsException:-1
我无法弄清楚为什么.. 它适用于1 4 3 5 6 2
答案 0 :(得分:1)
问题在于你的while循环,这就是你可能会遇到异常while(ar[j]>k && j>-1)
的行。您正尝试使用负索引(即-1)访问数组。当您尝试访问数组的下限或外部边界之外的元素时,会出现此异常。
j=i-1
while(ar[j]>k && j>-1)
)尝试访问[j]即.. a [-1],因此你得到了ArrayOutOfBoudException。 您可能需要检查j&gt;在访问数组之前为-1,即在
中的while循环中反转条件while(ar[j]>k && j>-1)
要
while(j>-1 && ar[j]>k)