插入排序java
这是我的代码:插入排序java,java,Java,这是我的代码: int size, i, j, temp; int arr[] = new int[50]; Scanner scan1 = new Scanner(System.in); System.out.print("Enter Array Size : "); size = scan1.nextInt(); System.out.print("Enter Array Elements : ");
int size, i, j, temp;
int arr[] = new int[50];
Scanner scan1 = new Scanner(System.in);
System.out.print("Enter Array Size : ");
size = scan1.nextInt();
System.out.print("Enter Array Elements : ");
for(i=0; i<size; i++)
{
arr[i] = scan1.nextInt();
}
System.out.print("Sorting Array using Insertion Sort Technique..\n");
for(i=1; i<size; i++)
{
temp = arr[i];
j = i - 1;
while((temp < arr[j]) && (j >= 0))
{
arr[j+1] = arr[j];
j = j - 1;
}
arr[j+1] = temp;
}
System.out.print("Array after Sorting is : \n");
for(i=0; i<size; i++)
{
System.out.print(arr[i] + " ");
}
}
运行此操作时,将显示一个错误:
线程主java.lang.ArrayIndexOutOfBoundsException中的异常:
索引-1超出长度为50时的界限
ProgramFinals.mainProgramFinals.java:72
阵列的大小已固定为50。如果用户输入任何大于该值的数字,则会出现ArrayIndexOutOfBounds异常,用于输入数字51以后的数据我有两个提示供您参考: 第一个提示:如果您想让用户定义数组的大小/长度,一个好的方法可能是先询问维度/长度,然后声明数组,如:
int[] arrayOfInts = new int[requestedDimension];
第二个技巧:为数组的维度创建一个变量是有意义的,但是只使用array.length更有意义,它更快,而且不需要为要创建的每个for中使用的变量分配内存
关于你的问题:
问题在于j,因为首先将j声明为i-1,在第一次迭代中,它使j=0,然后比较j是否大于或等于0,然后将j减小1,使其为-1,并有效地引发ArrayIndexOutOfBounds异常
j = i - 1;
while((temp < arr[j]) && (j >= 0))
{
arr[j+1] = arr[j];
j = j - 1;
}
尝试将while循环的第二个条件设为j>0。您允许用户输入任意数组大小,但您已将其大小声明为50,这有意义吗?这是否回答了您的问题?