我已经用优先队列取代了现有的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
。