Java 如何手动对对象数组进行排序?不使用数组类中包含的排序方法?
我对Java还是很陌生,这是我第一次使用堆栈溢出,请耐心听我说 我正在用一个对象数组制作一个程序,在这个例子中,我正在制作一个甜点数组。每个甜点都有一个随机生成的整数“秩”。我们必须执行的程序的一部分是对对象数组进行排序,而不使用array类中包含的排序方法。我查找了一个关于如何用整数对基本数组进行排序的典型示例,并尝试将其合并到我的代码中的desertsort方法中。当我运行数组时,它不会改变Java 如何手动对对象数组进行排序?不使用数组类中包含的排序方法?,java,arrays,sorting,object,Java,Arrays,Sorting,Object,我对Java还是很陌生,这是我第一次使用堆栈溢出,请耐心听我说 我正在用一个对象数组制作一个程序,在这个例子中,我正在制作一个甜点数组。每个甜点都有一个随机生成的整数“秩”。我们必须执行的程序的一部分是对对象数组进行排序,而不使用array类中包含的排序方法。我查找了一个关于如何用整数对基本数组进行排序的典型示例,并尝试将其合并到我的代码中的desertsort方法中。当我运行数组时,它不会改变 import java.util.Random; public class Desserts {
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());
}
}
}
这是输出:
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
我可以看出我做得不对,但我不知道该做什么。尝试使用
Collections.sort()
我想我在修修补补后才发现。我使用了一个简单的选择排序算法,它成功了:
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());
}
}
我用来指导我的原始错误代码的搜索算法可能不适合我试图完成的任务。要求您实现自己的排序算法。在线复制代码或让StackOverflow上的人员为您解决此问题对您的学习没有帮助。无论您的排序实施是否正确,使用
j>货物的循环条件将不会完成多少工作。长度
!在甜品分拣
中,您的外循环有一个坏的结束条件。更改为j
。您的while
循环也不会运行,它将用goods[i]覆盖所有商品。最好检查一个排序算法并尝试实现它。op说没有内置排序,实际上它只提到数组类,而不排除其他内置排序@GoldRose19您的问题是与排序对象有关,还是与排序算法的实际实现有关?这很公平是的,询问op可能更好。我将其解释为没有像Array类中那样的内置方法。正确-我必须重新阅读我们的说明,但它只明确指出“数组类中提供的排序方法”。尽管就我自己的知识而言,我想知道如何手动执行。因此,我认为这是实际的实现。
Collections.sort(yum, (a, b) -> Integer.compare(a.getRank(), b.getRank()));
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