冒泡排序字符串数组

时间:2013-11-19 16:23:51

标签: java sorting

我正在尝试使用冒泡排序来按字母顺序排列我已读入程序的数组。代码编译没有错误,但是当我尝试运行程序时,我在'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

4 个答案:

答案 0 :(得分:2)

您将passNum而不是i与数组的长度进行比较。由于永远不会修改passNum,因此循环条件始终为真,i递增,直到超出数组的范围。

即使解决了这个特定问题,您仍可能遇到当前实现的逐个错误问题。考虑是否应将iinL.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中数组的第一个索引