【问题标题】:Insertion Sort Double Array with User Input - JAVA带有用户输入的插入排序双数组 - JAVA
【发布时间】:2023-03-30 02:45:01
【问题描述】:

我的任务是使用诸如插入排序之类的排序方法,按照用户输入的降序创建一个双精度(或浮点)数组。

我尝试在整个代码中操纵数字值。它不断抛出“索引 -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] + "  ");
       }
   }
}

【问题讨论】:

  • 您应该为您使用的语言添加一个标签。
  • 当然可以!我修好了。
  • 它有效,我明白为什么。谢谢!

标签: java arrays double reverse insertion-sort


【解决方案1】:

问题出在这里:

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

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

在大多数具有expr1 &amp;&amp; expr2 等表达式的语言中,如果 expr1 限定为 false,则不会计算 expr2。

正确的代码如下所示:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-13
    相关资源
    最近更新 更多