我正在帮助一个项目的朋友,我们似乎无法找到这种排序方法不起作用的原因。我怀疑问题是什么,但我不知道如何解决或替换它。
该计划跟踪捐赠数据,我们正在尝试实施一项功能,将捐赠者的名字按字母顺序排列无效。
我们通过向量和字母顺序排序的方法:
//from other classes:
Vector <Donor> infoVector = new Vector <Donor>();
String FName;
Donor tempDonor = new Donor ();
int drawer = 0;
for (int x = 0; x<infoVector.size(); x++)
{
for (int y = x+1; y<infoVector.size(); y++)
{
drawer = y;
}
if(infoVector.elementAt(x).getFName().compareTo(infoVector.elementAt(drawer).getFName()) < 0)
{
tempDonor = infoVector.elementAt(x);
infoVector.setElementAt(infoVector.elementAt(drawer), x);
infoVector.setElementAt(tempDonor, drawer);
}
}
当我们输出捐赠者名字时,它不会对捐赠者名称进行排序;我认为这与使用&#34; compareTo&#34;比较名称有关。但我没有更好的选择。
答案 0 :(得分:0)
有一些库方法可以为您排序。请查看Collections.sort(List)
或Collections.sort(List, Comparator)
我相信你的代码不起作用的原因是因为内部for
循环的大括号。现在所有的内部循环都会将infoVector.size() - 1
分配给drawer
,因为根据你的大括号,你在此期间不会对drawer
做任何事情。我怀疑你想要做的是将if
块放在内部循环中。
更挑剔的事情:drawer
并非绝对必要;在原始代码中,您只需替换infoVector.size() - 1
(或包含该值的变量)。此外,排序方法不是您可以使用的最有效的排序方法,但如果infoVector
足够短并且此方法调用过于频繁,则无关紧要。
答案 1 :(得分:0)
此代码
for (int y = x+1; y<infoVector.size(); y++)
{
drawer = y;
}
将完全遍历向量,因此y
始终为infoVector.size() - 1
即使您将tempDonor
放在最后,下一次迭代,您也会将其移回。
不要试图发明轮子,而是使用Collections.sort。
参见What function can be used to sort a Vector? 和 http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#sort(java.util.List)