java - 排序数组 - 任何人都可以帮我解决我失败的地方吗?
问题描述
我需要组织一个数组,但出现 OutOfBoundException 错误:
int[] A = {8, 6, 7, 9, 4, 8, 1, 4, 10, 3};
int start = 0;
int end = A.length;
public void insertionSort(int[] A, int start, int end) {
for (int i = start; i <= end; i++){
for (int j = i+1; j > start; j--){
if(A[j] < A[j-1]){
int k = j-1;
swap(A, j, k);
那个交换函数是别人已经做过的方法,他是教授,所以错误不是来自那里。谁能指出我失败的地方?
解决方案
数组从索引 0 而不是 1 开始。因此,数组的长度已经超出了索引的范围。只需更改您的第一个 for 循环,使其运行只要i<end
可以解决您的问题。
for (int i = start; i < end; i++)
除此之外,您的内部循环也是错误的。您可以选择是要测试下一个索引 (i+1) 还是上一个索引 (i-1)。在 (i+1) 的情况下,外部循环再次运行得太远(现在它必须是i < end-1
)。如果您想使用之前的索引 (i-1) 进行更改,您的 i 必须从 1 而不是 0 开始。
例如(与下一个元素交换):
for (int i = 0; i < end-1; i++){
for (int j = i+1; j > 0; j--){
if(A[j] < A[j-1]){
推荐阅读
- python - 从用户那里获取一组字母并从单独的字典文件中打印出所有有效单词组合的程序
- java - 将文件从我计算机上的“同步文件夹”移动到谷歌驱动器上的另一个文件夹
- python - 列出分配索引超出范围的代码信号
- c - 指向自身的指针
- html - 是否可以将网格单元中的多个元素作为一个元素定位,而无需容器包装它们?
- python - `python -m pdb myscript.py` - 启动后如何自动“继续”?
- r - 使用铅与 dplyr 计算两个时间戳之间的差异
- python - Python TkInter - 多个组合框复制彼此的选定值
- arrays - 如何用零填充数据结构的静态数组中确定索引的所有数据?
- laravel - Laravel - 从 URL 获取 ID 并解析带有破折号 (-) 的 URL