我正在尝试创建一种方法,以基于分配给对象的名称字段按字母顺序对要显示给用户的对象数组进行冒泡排序。我一直在努力尝试解决这一问题,而对于我自己的一生,我无法做到。我所做的所有研究并没有真正帮助,尝试了很多不同的代码,它们似乎都停止了程序,给了我更多的问题。所以我想问一下。这就是我现在正在使用的。

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)


这是我的候选类中的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++;


我最初的第一行低于候选人计数的增量,因此数组从1而不是0开始,但这不能解决问题。我仍然收到NPE错误。数组可以很好地打印出来,因此数据就可以进入了。但是我的compareTo方法似乎出了点问题。

最佳答案

您不能将值分配给candidate[j].getName()。没有像C ++中那样的“ L值”,您可以在其中做类似的事情(例如myVector.at(j) = newValue;)。

您必须使用类似candidate[j].SetName(candidate[j+1].getName());的名称

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

关于java - Java中的冒泡排序对象数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32592992/

10-10 08:00