【发布时间】:2015-09-15 18:20:23
【问题描述】:
我正在尝试创建一种方法,根据分配给对象的名称字段对要按字母顺序显示给用户的对象数组进行冒泡排序。几天来,我一直在尝试解决这个问题,而我这辈子做不到。我所做的所有研究都没有真正帮助,尝试了一堆不同的代码,它们似乎都只是停止程序/给我更多问题。所以我想我会问。这就是我现在正在使用的。
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() 访问候选类中的私有名称字段有关,但我不确定如何做到这一点。有什么帮助吗?
编辑:我现在在以下行收到 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 方法似乎出了点问题。
【问题讨论】:
-
和 BTW
boolean finished = false; while (!finished)更具可读性...
标签: java arrays sorting bubble-sort