插入排序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,这有意义吗?这是否回答了您的问题?