我的任务是使用插入排序等排序方法,按照用户输入的降序创建一个 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/