java - Java 中的对象数组冒泡排序

标签 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 类中的私有(private)名称字段有关,但我不确定如何执行此操作。有什么帮助吗?

编辑:我现在在以下行收到 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++;

我最初的第一行位于候选计数增量下方,因此数组从 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/

相关文章:

java - 如何从jar文件运行类文件,其中类文件位于bin文件夹中

javascript - 在 Javascript 中以对象作为键值的数组

javascript - 当有 2 个数组要检查或比较时使用 javascript 过滤

python - 将相同的字典顺序分配给二维数组的重复元素

java - 为什么我不能在这段代码中使用 Collections.max() 函数? - java

java - GUI 中用于自定义 Weka 分类器的选项

java - 继承与组合的区别

java - junit5 的问题 - @DisplayName 不显示 testName

c# - 使用 LINQ 保留顺序

java - 如何将我的 toString 方法的字符串数组转换为字符串