用Priorityqueue代替LinkedList.错误显示为java.lang.ClassCastException



我已经用优先队列取代了现有的LinkedList,你可以在图片中找到。当我运行循环

时,u也可以找到错误
public static void main(String[] args) {
// TODO code application logic here
Scanner input = new Scanner(System.in);
int sel;
PriorityQueue<Worker> userQueue = new PriorityQueue<>();
PriorityQueue<String> users = new PriorityQueue<>();
while(true)
{
System.out.print("1) Add jobn2) Run Jobsn3) Clear Jobsn4) Add Usern5) Print usersn0) Exitn");

sel = getInteger(input);
if (sel == 0)
{
break;
}
else if (sel == 1)
{
System.out.print("1) Basic Jobn2) Repeating Jobn0) Canceln");
sel = getInteger(input);
if (sel == 1)
{
System.out.println("Enter job message");
String msg = input.nextLine();
msg = input.nextLine();
userQueue.offer(new Worker(msg)); }

//我在userQueue中得到异常。提供(新工人(msg));//

Exception in thread "main" java.lang.ClassCastException: class cis265.Worker cannot be cast to class java.lang.Comparable (cis265.Worker is in module cis265_queue of loader 'app'; java.lang.Comparable is in module java.base of loader 'bootstrap')
at java.base/java.util.PriorityQueue.siftUpComparable(PriorityQueue.java:643)
at java.base/java.util.PriorityQueue.siftUp(PriorityQueue.java:639)
at java.base/java.util.PriorityQueue.offer(PriorityQueue.java:330)
at cis265_queue/cis265.Cis265_queue.main(Cis265_queue.java:63)

最根本的问题是你试图把一些东西按顺序排列,而没有告诉Java这个顺序应该是什么。

参见Javadoc:

依赖于自然排序的优先级队列也不允许插入不可比较的对象(这样做可能导致ClassCastException)。

所以,要么让你的Worker实现Comparable,要么为PriorityQueue的构造函数提供一个Comparator

相关内容

最新更新