【发布时间】: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