我正在从事一项涉及数组排序方法的家庭作业,向我们提供了这些方法,并且在理解此插入排序方法的功能时遇到了一些麻烦。更具体地说,两个变量传递给方法的作用。
据我所知,Key变量描述了您要插入插入的数字的数组的索引,而该项是数字本身。在main中,我只是简单地要求用户输入两个数字并将它们传递给方法,一个用于键,另一个用于项。这是该段的给定代码:
public final void insertion(double Key, double Item)
{
if (arraySize == 0)
{
arr[0] = Item;
}
/* find the position for inserting the given item */
int position = 0;
while (position < arraySize & Key > arr[position])
{
position++;
}
for (int i = arraySize; i > position; i--)
{
arr[i] = arr[i - 1];
}
arr[position] = Item;
arraySize = arraySize + 1;
}
但是,当我将双精度数传递给该方法时,我收到一条错误消息,指出索引(数组长度)超出了长度(数组长度)的范围。
很显然,我对这种方法的目的或结构有误解,无法弄清楚。任何帮助,将不胜感激。我知道这是一个非常简单的问题。
编辑:这是我初始化数组的方式,给定的代码位于与主方法不同的类中:
public static double[] arr;
private int arraySize;
public sortedArrayAccess(int scale)
{
arr = new double[scale];
arraySize = arr.length;
}
在我的主要方法中:
System.out.print("Enter an array size: ");
int d = sc.nextInt();
sortedArrayAccess test = new sortedArrayAccess(d);
for(int i=0;i<test.arr.length;i++)
{
System.out.print("Enter a number for index " + i + ": ");
double c = sc.nextDouble();
test.arr[i] = c;
}
答案 0 :(得分:0)
如何初始化“ arr”变量?
无论如何,问题在于创建阵列时-您应该指定初始容量。每次将元素添加到数组中时,都将增加它。 如果您要查询一个数组索引为i的单元格(如果数组容量小于I),则会得到arrayOutOfBoundsException。
答案 1 :(得分:0)
您的问题在这里:
if (arraySize == 0)
{
arr[0] = Item;
}
您正在将Item分配给数组中的第一个元素。但是数组大小必须为空,如if (arraySize == 0)
因此,您有两种选择:
答案 2 :(得分:0)
if (arraySize == 0)
{
arr[0] = Item;
}
如您所知,在计算机科学中,索引从0开始。这意味着arr [0]是阵列的第一个插槽。如果arraySize为0,则没有这样的索引arr [0]。您的代码尝试将Item插入大小为零的数组。这会导致索引超出范围。
顺便说一句,如果它是对值的排序算法,则不需要“ Key”变量。您可以删除它。但是,如果需要,则应按元素的键值对其进行排序。
例如,如果我们有
element 1 -> key= 101 , value= 6
element 2 -> key= 201 , value= 9
element 3 -> key= 301 , value= 2
您不应将它们排序为元素3 <元素1 <元素2
您应该像这样对它们进行排序:element 1 换句话说,如果要按它们的值对它们进行排序,则将键值作为参数传递是没有意义的。