Java中的Bubblesorting对象数组

时间:2015-09-15 18:20:23

标签: java arrays sorting bubble-sort

我正在尝试创建一种方法,根据分配给对象的名称字段,按字母顺序对要显示给用户的对象数组进行散列处理。我一直在努力想要解决这个问题几天,而对于我的生活,我不能这样做。我所做的所有研究都没有真正帮助,尝试了一堆不同的代码,他们似乎只是停止程序/给我更多的问题。所以我想我会问。这就是我现在正在使用的。

public static void sortName(Candidate candidate[])
  {
    int j;
    boolean finished = true; 
    String temp;
    while ( finished )
    {
        finished = false;
        for (j=0;j<candidate.length-1;j++)
        {
             if (candidate[j].getName().compareTo(candidate[j+1].getName())>0)
                {                                            
                   temp = candidate[j].getName();
                   candidate[j].getName() = candidate[j+1].getName();
                   candidate[j+1].getName() = temp; 
                   finished = true;
                       } 
               } 
        } 
  } 

if语句中的第2行/第3行给出了错误,说它期望变量但找到一个值。我怀疑这与尝试通过.getName()访问Candidate类中的私有名称字段有关,但我不确定如何做到这一点。有什么帮助吗?

编辑:我现在在下一行中收到NPE错误

if (candidate[j].compareTo(candidate[j+1])>0)

这是我的Candidate课程中的compareTo方法。

public int compareTo(Candidate candidate)
{
    int candidateCompare = this.getName().compareTo(candidate.getName());         
    if (candidateCompare != 0)
        return candidateCompare;
    else{
        if (this.getName().compareTo(candidate.getName()) < 0)
           return -1;
        if (this.getName().compareTo(candidate.getName()) > 0)
            return 1;
    }
    return 0;
}

我不明白为什么会发生这种情况,尝试研究解决方案但没有找到任何帮助。

编辑2:我的do-while循环中有以下几行,我获取了我班级数据字段的用户输入。在此循环中,将创建一个包含数据的新对象,并将其分配给名为origCandidateList的对象数组。这是代码。

 origCandidateList[candidateCount] = new Candidate(candidateName, candidateAge, candidateParty, candidateIssue);
 candidateCount++;

我最初的第一行低于candidateCount增量,因此数组从1开始而不是0,但这并没有解决问题。我仍然遇到NPE错误。数组打印出来很好,所以数据进入它。但是我的compareTo方法似乎出现了问题。

3 个答案:

答案 0 :(得分:2)

您无法为candidate[j].getName()指定值。在C ++中没有“L值”,你可以在那里做类似的事情(例如myVector.at(j) = newValue;)。

您必须使用candidate[j].SetName(candidate[j+1].getName());

之类的内容

更好的是,通过candidate[j] = candidate[j+1]切换整个对象。

答案 1 :(得分:0)

不是不尊重,但是有没有理由想要进行冒泡排序而不是使用内置排序机制?对于除了相对较小的数据集之外的任何东西,冒泡排序都是非常低效的。

无论如何,您需要记住Java(通常)使用对象,因此您应该交换数组中的对象,而不是尝试切换对象成员。

答案 2 :(得分:0)

尝试在为其分配新值之前将变量保存在String中。

String temp = canditate[j].getName();
String firstCandName = candidate[j].getName();
String secondCandName = canditate[j+1].getName();
firstCandName = secondCandName;
secondCandName = temp;

例如candidate[j].getName() = temp不起作用的原因是因为candidate[j].getName() 不是变量,并且参数的左侧应该是变量,因此这会给你一个错误。尝试做我上面做的事应该适合你。 只是为了澄清我的意思candiate[j].getName()不是变量。 getName()方法返回一个String,因此整个函数是一个String。因此,当您将它放在相等的左侧并尝试修改它时,Java将不知道要修改的内容。就像说

"Sample String" = "Another Sample String"代替,

String sampleString = "Sample String";
sampleString = "Another Sample String";

虽然这对你有用,但我个人认为你最好不要在数组中交换对象。