我正在尝试使用冒泡排序来按字母顺序排列我已读入程序的数组。代码编译没有错误,但是当我尝试运行程序时,我在'if'构造中得到了一个Array Index Out Of Bounds Exception。我已将int i初始化为0以解释数组的第一个索引,所以我认为我的错误在其他地方。我不是要求任何人为我编写代码,只是可能是正确方向的一点。谢谢你的帮助。
public static String[] bubbleSort(String[] inL)
{
String temp;
int i = 0, passNum;
for(passNum = 1; passNum <= (inL.length); i++) // controls passes through bubble sort
{
if(inL[i].compareToIgnoreCase(inL[i + 1]) < 0)
{
temp = inL[i];
inL[i] = inL[i + 1];
inL[i + 1] = temp;
}
}
return inL; // returns sorted array
} // end bubbleSort method
答案 0 :(得分:2)
您将passNum
而不是i
与数组的长度进行比较。由于永远不会修改passNum
,因此循环条件始终为真,i
递增,直到超出数组的范围。
即使解决了这个特定问题,您仍可能遇到当前实现的逐个错误问题。考虑是否应将i
与inL.length - 1
进行比较。
答案 1 :(得分:2)
你永远不会增加passNum
,所以i
会永远递增。此外,Java中的数组索引基于0.这意味着最大的有效索引是inL.length - 1
。由于循环体正在访问inL[i+1]
,因此您应该安排代码,以使i
永远不会超过inL.length - 2
。至少,您应该在<=
循环终止测试中将<
更改为for
。 (但是,比较和递增的逻辑让我感到厌烦;你也需要解决这个问题。)
答案 2 :(得分:0)
Array.length
存储数组的总长度,从1开始计数。
数组中的第一个索引为0,表示最后一个索引为length-1
。
调整你的for循环中的检查以修复错误
答案 3 :(得分:0)
你的问题是passNum <= (inL.length)
它应该是passNum < (inL.length)
,因为0是java中数组的第一个索引