2
我正在使用優先級隊列根據cgpa(這是一個double值)對學生列表進行排序。如果我把它作爲整數比它工作正常,或者如果我添加一個字段名稱作爲字符串和基於字符串排序,那麼它也可以正常工作。雙數據類型沒有在java中的優先隊列中正確排序
public class MainClass {
public static void main(String[] args) {
// comparator class to sort the student on basis of cgpa.
Comparator<Student> studentComparator = new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
if (s1.getCgpa() < s2.getCgpa())
return 1;
else if (s1.getCgpa() > s2.getCgpa())
return -1;
else
return 0;
}
};
Scanner in = new Scanner(System.in);
int totalEvents = 8;
PriorityQueue<Student> studentList = new PriorityQueue<>(totalEvents, studentComparator);
// adding value in to priority queue by taking input from user in cmd
while(totalEvents>0) {
double cgpa = in.nextDouble();
Student student = new Student(cgpa);
studentList.add(student);
totalEvents--;
}
for (Student s : studentList) {
System.out.println(s.getCgpa());
}
}
}
這是我的模型類。
class Student {
private double cgpa;
public Student(double cgpa) {
super();
this.cgpa = cgpa;
}
public double getCgpa() {
return cgpa;
}
}
這裏是我的輸入
3.75
3.8
3.7
3.85
3.9
3.6
3.95
3.95
,這裏是輸出
3.95
3.95
3.9
3.85
3.8
3.6
3.7
3.75
我試圖strictfp關鍵字,並試圖用雙包裝類,但仍同樣的問題。
同意上述的答案。 但我想補充一點,沒有理由對PriorityQueue進行排序。您可以使用輪詢方法。 (!studentList.isEmpty()) System.out.println(studentList.poll()。getCgpa()); –
感謝您的建議。而不是每個我輪詢優先隊列的數據,它的工作。我想糾正的一件事是我無法使用Arrays.sort()對數組排序,因爲我的學生類沒有實現可比較的接口,所以我將得到一個異常並且優先級隊列已經對數據進行了排序。 – Ishan
@Ishan輪詢在這裏看起來像是一個非常聰明的選項,前提是您可以從隊列中移除元素。如果您想保持隊列完好無損,這將不是一種選擇。 –