我正在尝试创建一种方法,根据分配给对象的名称字段,对要按字母顺序显示给用户的对象数组进行冒泡排序。这几天我一直在尝试解决这个问题,但我一生都做不到。我所做的所有研究并没有真正帮助,尝试了一堆不同的代码,它们似乎都只是停止了程序/给我带来了更多问题。所以我想我会问。这就是我现在正在做的事情。
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/