我正在尝试按对象的变量命名为“name”按字母顺序对对象的arraylist进行排序。这是我写的代码:
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()));
答案 0 :(得分:0)
冒泡排序的名称意味着存在已排序和未排序项目的气泡。你忘了这个事实。这是工作(我希望)代码:
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
}
}
}