java - 带用户输入的插入排序 double 组 - JAVA

标签 java arrays double reverse insertion-sort

我的任务是使用插入排序等排序方法,按照用户输入的降序创建一个 double (或浮点)数组。

我尝试在整个代码中操作数值。它不断抛出“索引-1超出长度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]))

关于java - 带用户输入的插入排序 double 组 - JAVA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57534237/

相关文章:

java - 充气城堡 api 出现 asn1 错误

java - mockito - 如何模拟不同参数的不同行为

c - 指针问题,数组第二个位置与另一个数组中的第一个位置相同

c - C 语言中 Double 变成 nan

java - 如何使用 ClassLoader 加载 txt 文件?

java - 雪球词干分析器 [Java]

php - MySQL INSERT 命令正在将输入转换为不同的格式/值

c++ - 在 C 中的 16 字符数组中连接 32 位 int block

c - 如果我使用 GPA 指针,为什么在使用 scanf ("%lf", GPA) 时会出现段错误,如果不是指针,则在使用 scanf ("%lf", &GPA) 时会出现段错误?

java - 在 Java 中将对象转换为 Double