“线程中的异常”;“主要”;java.lang.ClassCastException:带有优先级队列和比较器

“线程中的异常”;“主要”;java.lang.ClassCastException:带有优先级队列和比较器,java,priority-queue,comparator,compareto,Java,Priority Queue,Comparator,Compareto,这个代码有什么问题。我收到下面的错误消息 Exception in thread "main" java.lang.ClassCastException: Nodes cannot be cast to java.lang.Comparable at java.util.PriorityQueue.siftUpComparable(Unknown Source) at java.util.PriorityQueue.siftUp(Unknown Source) at ja

这个代码有什么问题。我收到下面的错误消息

Exception in thread "main" java.lang.ClassCastException: Nodes cannot be cast to java.lang.Comparable
    at java.util.PriorityQueue.siftUpComparable(Unknown Source)
    at java.util.PriorityQueue.siftUp(Unknown Source)
    at java.util.PriorityQueue.offer(Unknown Source)
    at java.util.PriorityQueue.add(Unknown Source)
请帮忙

import java.util.Comparator;
import java.util.InputMismatchException;
import java.util.List;
import java.util.PriorityQueue;
import java.util.Queue;

class Nodes implements Comparator<Nodes> {
        public int n;
        public int c;

        public Nodes() {
        }

        public Nodes(int n, int c) {
            this.n = n;
            this.c = c;
        }

        @Override
        public int compare(Nodes Nodes1, Nodes Nodes2) {
            if (Nodes1.c < Nodes2.c) {
                return -1;
            }
            if (Nodes1.c > Nodes2.c) {
                return 1;
            }
            return 0;
        }
    }
class dj
{ 
    public static void main(String[] args) {
Queue<Nodes> pq = new PriorityQueue<Nodes>();
    pq.add(new Nodes(5,4));
   pq.add(new Nodes(6,7));
   pq.add(new Nodes(7,6));
   pq.add(new Nodes(8,9));
   pq.add(new Nodes(9,8));
   pq.add(new Nodes(8,8));  

    }
}
import java.util.Comparator;
导入java.util.InputMismatchException;
导入java.util.List;
导入java.util.PriorityQueue;
导入java.util.Queue;
类节点实现比较器{
公共int n;
公共INTC;
公共节点(){
}
公共节点(int n,int c){
这个,n=n;
这个.c=c;
}
@凌驾
公共整数比较(节点1、节点2){
if(节点1.c<节点2.c){
返回-1;
}
如果(节点1.c>节点2.c){
返回1;
}
返回0;
}
}
dj级
{ 
公共静态void main(字符串[]args){
队列pq=新的优先级队列();
新增(新节点(5,4));
新增(新节点(6,7));
新增(新节点(7,6));
新增(新节点(8,9));
新增(新节点(9,8));
新增(新节点(8,8));
}
}

由于实现了错误的接口,因此出现此错误

你需要的是

class Nodes implements Comparable<Nodes>
类节点实现可比较的
这表示可以将Nodes类与其他节点进行比较。 这是在PriorityQueue中使用它所必需的

比较器是一个比较对象的类,即使对象本身没有实现可比较的对象。它通常可以传递给特定的排序函数,并且通常独立于类本身(可以有多个具有不同逻辑的比较器)

有关更多信息,请参阅这两个类的JavaDoc:



由于实现了错误的接口,因此出现此错误

你需要的是

class Nodes implements Comparable<Nodes>
类节点实现可比较的
这表示可以将Nodes类与其他节点进行比较。 这是在PriorityQueue中使用它所必需的

比较器是一个比较对象的类,即使对象本身没有实现可比较的对象。它通常可以传递给特定的排序函数,并且通常独立于类本身(可以有多个具有不同逻辑的比较器)

有关更多信息,请参阅这两个类的JavaDoc:



您可能需要实现Comparable,而不是Comparator,提示:这里真正要学习的是:学习阅读异常消息-它们准确地告诉您发生了什么!这是学习编程时的一件大事:你必须注意一些微妙的细节,比如“Comparator”与“Comparable”不同。你可能需要实现Comparable,而不是Comparator。提示:真正需要学习的是:学会阅读异常消息-它们确切地告诉你发生了什么!这是学习编程时的一件大事:你必须注意一些微妙的细节,比如“Comparator”与“Comparable”不同。为了让你的答案更完美,你可以自己输入Javadoc链接;-)为了使答案更完美,您可以自己输入Javadoc链接;-)