这是一个愚蠢的问题。我有自己的比较器接口,类Student - 它的对象将被排序,类BubbleSort与bubblesorting算法和main。我认为除了main之外的每个类都写得很好,但我在main中实现它们有问题让我的排序开始:/我刚刚创建了随机学生的ArrayList我想要排序,但我有问题BubbleSort类并不知道如何开始。
将来(我希望今天会这样:))我将在这里与包含排序算法(如BubbleSort)的其他类完全相同。我认为他们在main中的实现是完全相同的。
import java.util.Random;
import java.util.ArrayList;
public class Program {
public static void main(String[] args) {
int elements = 100000;
ArrayList<Student> list = new ArrayList<Student>();
Random rand = new Random();
for (int i=0; i<elements; i++) {
list.add(new Student(rand.nextInt(4)+2, rand.nextInt(900000)));
}
System.out.println(list);
}
}
import java.util.ArrayList;
public class BubbleSort {
private final Comparator comparator;
public BubbleSort(Comparator comparator) {
this.comparator = comparator;
}
public ArrayList<Student> sort(ArrayList<Student> list) {
int size = list.size();
for (int pass = 1; pass < size; ++pass) {
for (int left = 0; left < (size - pass); ++left) {
int right = left + 1;
if (comparator.compare(list.get(left), list.get(right)) > 0)
swap(list, left, right);
}
}
return list;
}
public int compare(Object left, Object right) throws ClassCastException
{ return comparator.compare(left, right); }
private void swap(ArrayList list, int left, int right) {
Object temp = list.get(left);
list.set(left, list.get(right));
list.set(right, temp);
}
}
public class Student implements Comparator<Student> {
int rate;
int indeks;
public Student(int ocena, int index) {
this.rate = ocena;
indeks = index;
}
public String toString() {
return "Numer indeksu: " + indeks + " ocena: " + rate + "\n";
}
public int getIndeks() {
return indeks;
}
public int getRate() {
return rate;
}
public int compare(Student left, Student right) {
if (left.getIndeks()<right.getIndeks()) {
return -1;
}
if (left.getIndeks() == right.getIndeks()) {
return 0;
}
else {
return 1;
}
}
}
public interface Comparator<T> {
public int compare(T left, T right) throws ClassCastException;
}
答案 0 :(得分:1)
这里有两点要点:
a)你根本不打电话。您需要实例化您的BubbleSort类并实际调用该方法。 list = new BubbleSort(new Comparator(){...}).sort(list);
&lt; - 此语法还要求sort方法是静态的,这样您就不需要为每种排序创建一个新对象。以下示例按索引排序。
list = new BubbleSort(new Comparator<Student>() {
@Override
public compare(Student a, Student b) {
return a.getIndeks() - b.getIndeks();
}
}).sort(list);
顺便说一下,这也假设BubbleSort是通用的,因为它更容易(并且有点理解) b)我希望这是某种项目,你必须展示你制作排序算法的能力,否则你应该使用库方法来做这些事情
此外,虽然代码还不错,但您可能希望将其展示给具有专业Java经验的人(它不符合许多标准,许多内容可以改进并且彼此保持一致),或者发布它到https://codereview.stackexchange.com/
答案 1 :(得分:1)
你的代码看起来有点奇怪。你没有提及,如果你必须使用冒泡排序,那么我写下我的想法
1. 未明确使用冒泡排序
您可以结合覆盖Collections.sort()
方法
compareTo()
所以你的代码看起来像这样
class Student implements Comparable<Student>{
//variables constructor methods go here
private index;
@Override
public int compareTo(Students s) {
int index = s.index;
if (this.index > index) {
return 1;
} else if (this.index == index) {
return 0;
} else {
return -1;
}
}
}
在您的主要班级Collections.sort(myStudents)
2. 明确使用冒泡排序
学生班
class Student{
//class variables methods constructor goes here
}
比较者班
class StudentComparator implements Comparator<Student>{
@Override
public int compare(Student a, Student b) {
//bubble sort code goes here
}}
主要课程
class MyMainClass{
public static void main(String[] args) {
public int elements = 100000;
ArrayList<Student> list = new ArrayList<Student>();
Random rand = new Random();
for (int i=0; i<elements; i++) {
list.add(new Student(rand.nextInt(4)+2, rand.nextInt(900000)));
}
Collections.sort(list, new StudentComparator());
}
答案 2 :(得分:0)
我没有看到你在任何地方调用bubblesort类。列表不会自动对其元素进行排序。请仔细阅读此链接。你会发现它很方便。 http://www.programcreek.com/2013/03/hashset-vs-treeset-vs-linkedhashset/