Chciałbym posortować studentów wg ocen, a jeżeli studenci mają takie same oceny to wg numeru.
Niby łatwe, no ale nie działa i nie mam pojęcia dlaczego ;p
Dobrze by było zrobić to na kolejkach priorytetowych
Przykładowo dla ciągu:
Numer Ocena
1 3
2 3
3 2
4 3
5 1
6 1
7 4
8 5
9 1
10 5
Powinienem dostać studentów (wg numeru) 5,6,9
a program wyświetla 5,9,6
...
Wskazówki, sugestie ?
import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Random;
public class Problem {
public static void main(String[] args) {
PriorityQueue<Student>kolejka1 = new PriorityQueue<Student>(1,new MojKomparator1());
PriorityQueue<Student>kolejka2 = new PriorityQueue<Student>(1,new MojKomparator2());
Random r=new Random();
for(int i=0; i<10 ; i++){
kolejka1.add(new Student(i+1,r.nextInt(5)+1));
}
System.out.println("Kolejka1: ");
for(Student s : kolejka1){
System.out.println("Nr: "+s.numer+" " + "Ocena: "+s.ocena);
}
System.out.println("\n\n\n\n");
while(!kolejka1.isEmpty()){
kolejka2.add(kolejka1.poll());
}
System.out.println("Kolejka2: ");
for(Student s : kolejka2){
System.out.print("Nr: "+s.numer+" ");
}
}
}
class Student{
int ocena;
int numer;
Student(int n, int o){
ocena=o;
numer=n;
};
}
class MojKomparator1 implements Comparator<Student>{
public int compare(Student a, Student b) {
return a.numer-b.numer;
}
}
class MojKomparator2 implements Comparator<Student>{
public int compare(Student a, Student b) {
int tmp=a.ocena-b.ocena;
return (tmp==0)?(a.numer-b.numer):tmp;
}
}