【问题标题】:Alphabetical Vector Sorting字母向量排序
【发布时间】:2014-04-30 01:31:42
【问题描述】:

我正在帮助一位朋友完成一个项目,但我们似乎找不到这种排序方法不起作用的原因。我怀疑问题是什么,但我不知道如何解决它或用替代方法替换它。

该程序跟踪来自捐赠的数据,我们正在尝试实施一项功能,以按字母顺序排列捐赠者的姓名,但无济于事。

我们对向量进行排序和按字母排序的方法:

//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);
    }
}

这不会在我们输出捐赠者姓名时对其进行排序;我认为这与使用“compareTo”比较名称有关,但我没有更好的选择。

【问题讨论】:

    标签: java sorting vector


    【解决方案1】:

    这段代码

    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)

    【讨论】:

    • 你有什么建议解决这个问题?
    【解决方案2】:

    有一些库方法可以为您进行排序。看看Collections.sort(List)Collections.sort(List, Comparator)

    我相信,您的代码不起作用的原因是您的内部 for 循环的大括号。现在,所有内部循环所做的就是将infoVector.size() - 1 分配给drawer,因为根据您的大括号,您同时不会对drawer 做任何事情。我怀疑你想要做的是将if 块放在内部循环中。

    一些更挑剔的东西:drawer 不是绝对必要的;在您的原始代码中,您可以简单地替换 infoVector.size() - 1 (或包含该值的变量)。此外,排序方法并不是您可以使用的最有效的排序方法,但如果 infoVector 足够短并且该方法调用的频率不是太高,那也没关系。

    【讨论】:

      猜你喜欢
      • 2011-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-16
      • 1970-01-01
      • 2014-04-29
      相关资源
      最近更新 更多