如何手动对对象数组进行排序?不使用Array类中包含的排序方法



我对Java还很陌生,这是我第一次使用Stack Overflow,所以请耐心等待。

我正在用一组对象制作一个程序,在这个例子中,我正在制作一组甜点。每个甜点都有一个随机产生的整数"0";等级";。程序的一部分是在不使用array类中包含的排序方法的情况下对对象数组进行排序。我查找了一个如何用整数对基本数组进行排序的典型示例,并试图用dessertSort方法将其合并到我的代码中。阵列在我运行时不会改变…

import java.util.Random;
public class Desserts {
public static void main(String[] args) {
DessertTerms[] yum;
yum = new DessertTerms[5];
Random random = new Random();

yum[0] = new DessertTerms("Chocolate cupcakes",random.nextInt(100));
yum[1] = new DessertTerms("Vanilla blondies",random.nextInt(100));
yum[2] = new DessertTerms("blackberry cobbler",random.nextInt(100));
yum[3] = new DessertTerms("apple pie",random.nextInt(100));
yum[4] = new DessertTerms("glazed donuts",random.nextInt(100));

for (int i = 0; i < yum.length; i++) {
System.out.println(yum[i].getName() + " " + yum[i].getRank());
}

dessertSort(yum);

}

public static void dessertSort(DessertTerms[] goods) {
for (int j = 1; j > goods.length; j++) {
DessertTerms current = goods[j];
int i = j - 1;
while ((i > 1) && (goods[i].getRank() > current.getRank())) {
goods[i + 1] = goods[i];
i--;
}
goods[i + 1] = current;
}
System.out.println("nSorted stuff....");
for (int i = 0; i < goods.length; i++) {
System.out.println((i+1) + " " + goods[i].getName() + " " + goods[i].getRank());
}

}
}

甜点条款类别:

public class DessertTerms {
private String name = "xxxxx"; //default name for dessert
private int rank = 0; //default rank

DessertTerms(){

}

public DessertTerms(String name, int rank) {
this.name = name;
this.rank = rank;
}


public String getName() {
return name;
}
public void setName(String newName) {
this.name = newName;
}

public int getRank(){
return rank;
}
public void setRank(int newRank){
this.rank = newRank;
}

@Override 
public String toString() {
return this.name + " " + this.rank;
}
}

这是输出:

Before sort......
Chocolate cupcakes 82
Vanilla blondies 60
blackberry cobbler 3
apple pie 91
glazed donuts 91
After sort....
Chocolate cupcakes 82
Vanilla blondies 60
blackberry cobbler 3
apple pie 91
glazed donuts 91

我可以看出我做这件事是错误的,但我不知道是什么。

我想我实际上是经过一些修补才弄明白的。我放弃了一个简单的选择排序算法,它奏效了:

public static void dessertSort(DessertTerms[] goods) {
int n = goods.length; 
for (int i = 0; i < n; i++) {
int min_rank = i;
for (int j = i + 1; j < n; j++)
if (goods[j].getRank() < goods[min_rank].getRank())
min_rank = j;

DessertTerms temp = goods[min_rank];
goods[min_rank] = goods[i];
goods[i] = temp;
System.out.println(goods[i].toString());
}
}

输出:

apple pie 3
Chocolate cupcakes 68
blackberry cobbler 86
glazed donuts 93
Vanilla blondies 95

我用来指导我最初错误代码的搜索算法可能不适合我试图实现的目标。

尝试使用Collections.sort()

Collections.sort(yum, (a, b) -> Integer.compare(a.getRank(), b.getRank()));

最新更新