Java中的Bubblesorting对象数组
我试图创建一个方法,根据分配给对象的名称字段,按字母顺序对要显示给用户的对象数组进行冒泡排序。几天来,我一直在胡思乱想,想弄明白这一点,但我这辈子都做不到。我所做的所有研究都没有真正起到作用,尝试了一堆不同的代码,它们似乎都只是停止了程序/给了我更多的问题。所以我想我应该问一下。这就是我现在的工作Java中的Bubblesorting对象数组,java,arrays,sorting,bubble-sort,Java,Arrays,Sorting,Bubble Sort,我试图创建一个方法,根据分配给对象的名称字段,按字母顺序对要显示给用户的对象数组进行冒泡排序。几天来,我一直在胡思乱想,想弄明白这一点,但我这辈子都做不到。我所做的所有研究都没有真正起到作用,尝试了一堆不同的代码,它们似乎都只是停止了程序/给了我更多的问题。所以我想我应该问一下。这就是我现在的工作 public static void sortName(Candidate candidate[]) { int j; boolean finished = true;
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;
}
}
}
}
这是我的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;
}
我最初在candidateCount增量下面有第一行,因此数组从1开始,而不是从0开始,但这并没有解决问题。我仍然得到一个NPE错误。数组打印得很好,因此数据将进入其中。但我的比较方法似乎出了问题 您不能将值分配给
候选[j].getName()
。没有像C++那样的“L值”,在那里你可以做类似的事情(例如:代码> MyVoal.AT(j)= NealValue;< /Cl> >)
您必须使用类似于candidate[j].SetName(candidate[j+1].getName())的内容代码>
更好的方法是,通过执行candidate[j]=candidate[j+1]
来切换整个对象,以避免不尊重,但是否有理由要执行冒泡排序而不是使用内置排序机制?除了相对较小的数据集,冒泡排序的效率非常低
无论如何,您需要记住Java(通常)与对象一起工作,因此您应该交换数组中的对象,而不是尝试切换对象成员。在为变量分配新值之前,请尝试将变量保存在字符串中
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()方法返回一个字符串,因此整个函数是一个字符串。因此,当您将它放在等式的左侧并尝试修改它时,Java不知道要修改什么。就像说
“示例字符串”=“另一个示例字符串”
而不是
String sampleString = "Sample String";
sampleString = "Another Sample String";
虽然这对您来说应该是可行的,但我个人认为您最好交换数组中的对象。并且顺便说一句
boolean finished=false;虽然(!finished)
更具可读性…这是有道理的,但我想只切换对象的名称字段会导致更多问题。谢谢。这是一个项目,我们需要使用冒泡排序。只交换局部变量中的名称有什么意义?它不会有任何永久性的效果,因此算法不会对任何东西进行排序!谢谢你的回复,你能看看我的编辑吗?我仍然被这件事缠住了,并且在去哪里的问题上被难住了。你绝对是对的@Waggili我太专注于错误,以至于忘记了排序。我的错。setName可以很好地工作,但正如我提到的,切换对象是最好的解决方案。@Paul我想数组有问题,请仔细检查数组并告诉我。@Iskandarcra我添加了另一个编辑,说明了发生的情况。
String temp = canditate[j].getName();
String firstCandName = candidate[j].getName();
String secondCandName = canditate[j+1].getName();
firstCandName = secondCandName;
secondCandName = temp;
String sampleString = "Sample String";
sampleString = "Another Sample String";