java - 需要帮助理解这种插入方法的结构
问题描述
我正在做一个涉及数组排序方法的家庭作业,我们得到了方法,但我在理解这种插入排序方法的功能时遇到了一些麻烦。更具体地说,传递给方法的两个变量所起的作用。
据我了解, 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;
}
解决方案
你的问题在这里:
if (arraySize == 0)
{
arr[0] = Item;
}
您正在将 Item 分配给数组中的第一个元素。但数组大小必须为空,如if (arraySize == 0)
所以你有两个选择:
- 调整数组的大小(通过创建一个新的)
- 或返回错误
推荐阅读
- google-cloud-functions - 欧洲地区仍有美国IP地址,我可以更改吗?
- vue.js - 如何在 Vue 中将逻辑分离到一个单独的组件中?
- python - 按组计算行中值之间的差异
- ffmpeg - 使用ffmpeg测量音量?
- python - Python:创建 RTF 文件时使用变量
- data-modeling - 技术初创公司使用的数据建模工具
- c# - Windows asp .net 应用程序和 Redis
- java - 在java中合并两个xml
- javascript - 刷新或表单提交后显示页面的特定部分
- javascript - 在 JavaScript 中的 Zapier 代码操作中从 URL 获取和散列文件