使用用户输入对双精度数组进行插入排序 - JAVA

Insertion Sort Double Array with User Input - JAVA

我的任务是使用插入排序等排序方法,根据用户输入按降序排列双精度(或浮点)数组。

我尝试在整个代码中操纵数字值。它不断抛出 "Index -1 out of bounds for length 50"

public static void main(String args[])
   {
       int size, i, j;
    Double temp;
       Double arr[] = new Double[50];
       Scanner scan = new Scanner(System.in);

       System.out.print("Enter Number of Elements : ");
       size = scan.nextInt();

       System.out.print("Enter the Elements : ");
       for(i=0; i<size; i++)
       {
           arr[i] = scan.nextDouble();
       }
       for(i=0; 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("Elements Sorted : \n");
       for(i=0; i<size; i++)
       {
           System.out.print(arr[i] + "  ");
       }
   }
}

问题出在这里:

j = i - 1;
while((temp <= arr[j]) && (j >= 0))

问题是在尝试使用它访问 arr 的元素之前,您没有检查确定 j >= 0,因此在循环的第一个 运行您正在访问 arr[-1],因此出现错误。

在大多数带有 expr1 && expr2 表达式的语言中,如果 expr1 符合条件为 false,则不会计算 expr2。

正确的代码如下:

j = i - 1;
while((j >= 0) && (temp <= arr[j]))