这是我在学习AP计算机科学时遇到的一种在Java中执行插入排序的方法:
public static void insertionSort(int[] x)
{
for (int i=1;i=0)
{
x[j+1]=x[j];
j--;
}
x[j+1]=temp;
}
}从逻辑上讲,我认为代码是正确的。但是,当我尝试使用以下代码使用该方法对列表进行排序时:
public static void main(String[] args)
{
int[] numList ={9,3,12,765,23};
insertionSort(numList);
for (int num:numList)
{
System.out.println(num);
}
}我得到了以下异常:线程"main“中的异常: java.lang.ArrayIndexOutOfBoundsException: Index -1超出了长度为5的界限
这里的问题是什么?
发布于 2021-03-02 12:54:58
您遇到了评估顺序问题。你的情况(
和
)是正确的,但由于您编写它们的顺序,
被评估为与
在它与0进行比较之前。将您的条件反转为
来解决。
多亏了短路评估(
https://en.wikipedia.org/wiki/Short-circuit
_
评估
)、
将不会被评估,因为
是错误的。
发布于 2021-03-02 12:53:59
使用
发布于 2021-03-02 12:56:46
在insertionSort方法的while循环中,语句应该是这样的
while (j >= 0 && x[j] > temp)https://stackoverflow.com/questions/66433487
复制相似问题