私は優先度キューを使用してdouble値のcgpaに基づいて生徒のリストをソートしています。私はそれが正常に動作しているよりも整数としてそれを作っている場合、または私は文字列としてフィールド名を追加し、文字列の基礎で並べ替える場合、それはうまく動作します。ダブルデータ型が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をソートする理由はないと付け加えたいと思います。 pollメソッドを使用できます。 while(!studentList.isEmpty()) System.out.println(studentList.poll()。getCgpa()); –
提案していただきありがとうございます。それぞれの代わりに私は優先順位のキューからデータをポーリングし、それは働いた。私が訂正したいのは、Arrays.sort()を使って配列をソートすることができないということです。学生クラスが同等のインターフェースを実装していないので、例外が発生し、優先順位キューはすでにデータをソートしています。 – Ishan
@Ishan Pollingはキューから要素を削除しても問題ありません。キューをそのままの状態にしたい場合は、オプションではありません。 –