【问题标题】:Why won't my bubble sort work? - Java为什么我的冒泡排序不起作用? - 爪哇
【发布时间】:2017-04-04 07:06:04
【问题描述】:

我正在尝试按名为“名称”的对象变量按字母顺序对对象数组列表进行排序。这是我为此编写的代码:

public void sortName()
    {
        int j;

        for ( j = 0;  j < theBatters.size()-1;  j++)
        {
            System.out.println(theBatters.get(j).getName().compareToIgnoreCase(theBatters.get(j+1).getName()));
            if ( theBatters.get(j).getName().compareToIgnoreCase(theBatters.get(j).getName()) > 0 )
            {                                             // ascending sort
                Collections.swap(theBatters, j, j+1);
                j=0;
            } 
        } 
    }

我认为问题与使用 swap 的行有关,因为当我在使用此 sortName() 方法后打印 arraylist 时,所有内容都按相同的顺序排列,尽管此行返回的值大于 0应该:

System.out.println(theBatters.get(j).getName().compareToIgnoreCase(theBatters.get(j+1).getName()));

【问题讨论】:

  • 在你的if语句中,你为什么要再次比较get(j)和get(j)?
  • @AndrewtheProgrammer 发现了这个错误。您希望在compareToIgnoreCase 方法的if 语句中包含theBatter.get(j+1)
  • 很高兴我能帮上忙,我知道像这样的简单错误只是看着就很难找到
  • facepalm真是个白痴哈哈谢谢大家
  • 缺少更改是因为您正在比较同一对象的名称。在打印比较结果时,您使用的是get(j)get(j+1),但在您的if 中,您使用的是get(j) 两次。您可能面临的其他问题是您在迭代结束时将j 设置为0。但是在每次迭代之后j++ 将被执行,所以在下一个迭代开始时,你的j 将变为1。考虑一下。

标签: java sorting arraylist bubble-sort


【解决方案1】:

冒泡排序的名字意味着有排序和未排序项目的气泡。你只是忘记了这个事实。这是工作(我希望)代码:

    public void sortName()
        {

            for ( int i = 0;  i < theBatters.size()-1;  i++) // bigger outer bubble
            for ( int j = i+1;  j < theBatters.size()-1;  j++) // smaller inner bubble
            {                   System.out.println(theBatters.get(i).getName().compareToIgnoreCase(theBatters.get(j).getName()));
                if ( theBatters.get(i).getName().compareToIgnoreCase(theBatters.get(j).getName()) > 0 )
                {                                             // ascending sort
                    Collections.swap(theBatters, i, j);
                    // j=0; // Not necessary and confusing. It is already in good order
                } 
            } 
        }

【讨论】:

    猜你喜欢
    • 2015-06-29
    • 2012-06-26
    • 2019-11-23
    • 2014-10-04
    • 1970-01-01
    • 1970-01-01
    • 2014-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多