为了账号安全,请及时绑定邮箱和手机立即绑定

需要帮助理解这种插入方法的结构

需要帮助理解这种插入方法的结构

慕村225694 2022-06-08 17:08:22
我正在做一个涉及数组排序方法的家庭作业,我们得到了方法,但我在理解这种插入排序方法的功能时遇到了一些麻烦。更具体地说,传递给方法的两个变量所起的作用。据我了解, 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;}但是,当我将双精度值传递给我已经解释过的方法时,我收到一条错误消息,指出索引(数组长度)超出了长度(数组长度)的范围。显然,我误解了这种方法的目的或结构,我无法弄清楚。任何帮助,将不胜感激。我知道这是一个非常简单的问题。编辑:这是我初始化数组的方式,给定的代码与我的 main 方法位于一个单独的类中:    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;        }
查看完整描述

3 回答

?
智慧大石

TA贡献1946条经验 获得超3个赞

你如何初始化'arr'变量?

无论如何,问题是当您创建阵列时 - 您应该指定初始容量。每次将元素添加到数组中时,都会增加它。当您尝试请求索引为 i 的数组单元格时,如果数组容量小于 I - 您将收到 arrayOutOfBoundsException。


查看完整回答
反对 回复 2022-06-08
?
慕后森

TA贡献1802条经验 获得超5个赞

你的问题在这里:


if (arraySize == 0)

{

    arr[0] = Item;

}

您正在将 Item 分配给数组中的第一个元素。但数组大小必须为空,如if (arraySize == 0)


所以你有两个选择:


调整数组的大小(通过创建一个新的)

或返回错误


查看完整回答
反对 回复 2022-06-08
?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

if (arraySize == 0)

    {

        arr[0] = Item;

    }

如您所知,在计算机科学中,索引从 0 开始。这意味着 arr[0] 是数组的第一个槽。如果 arraySize 为 0,则没有这样的索引 arr[0]。您的代码尝试将 Item 插入到大小为零的数组中。这会导致 Index out of bound 异常。


顺便说一句,如果是值的排序算法,则不需要“Key”变量。你可以删除它。但如果需要,您应该按元素的键值对元素进行排序。


例如,如果我们有:


element 1 -> key= 101 , value= 6

element 2 -> key= 201 , value= 9

element 3 -> key= 301 , value= 2

您不应将它们排序为 element 3 < element 1 < element 2 您应该将它们排序为: element 1 < element 2 < element 3 以便它们的键值。


换句话说,如果你想按它们的值对它们进行排序,将键值作为参数传递是没有意义的。


查看完整回答
反对 回复 2022-06-08
  • 3 回答
  • 0 关注
  • 91 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信