为了账号安全,请及时绑定邮箱和手机立即绑定

无法比较的可比较类型(对象)

无法比较的可比较类型(对象)

繁星点点滴滴 2021-08-25 16:40:20
我收到这个神秘的错误:运算符 > 未定义参数类型 java.lang.Comparable, java.lang.Comparable有没有搞错?(这是代码)public class BST<T extends Comparable<T>> {    public static class Node<P extends Comparable<P>> {        P val;        Node<P> left;        Node<P> right;        public Node() {        }        public Node(P val) {            this.val = val;        }    }    Node<T> root;    private void addValHelper(Node root, Node newNode) {        if (root.val > newNode.val) { // <-- ERROR IS HERE            if (root.left == null) {                root.left = newNode;            } else {                addValHelper(root.left, newNode);            }        } else {            if (root.right == null) {                root.right = newNode;            } else {                addValHelper(root.right, newNode);            }        }    }}
查看完整描述

1 回答

?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

Java 没有运算符重载。您不能将 Comparable 类型与>. 你需要root.val.compareTo(newNode.val)改用。

作为旁白:

  • Comparable 是一个接口,而不是一个类

  • 你不需要指定 <P extends Comparable<P>>

  • addValHelper代码移动到 Node 类本身可能更有意义

  • 它可能是有意义的Node实现Comparable

这样,您的代码感觉更加地道,并且您不会将 Node 的字段暴露给 BST。

public class BST<T implements Comparable<T>> {

    private final Node<T> root;


    /** Presumably this is run when a value is added.. */

    private void addValueHelper(Node rootNode, Node newNode) {

        rootNode.attachChild(newNode);

    }


    public static class Node implements Comparable<T> {

        private final T val;

        private Node left;

        private Node right;


        public Node(T val) {

            this.val = val;

        }


        public int compareTo(Node other) {

            return this.val.compareTo(other.val);

        }


        /**

         * Takes the given node and compares it with the current node.

         * If the current node is greater than the given node, the given node is placed to the left.

         * Otherwise it is placed to the right.

         */

        protected void attachChild(Node newNode) {

            if (this.compareTo(newNode) == 1) {

                if (this.left == null) {

                    this.left = newNode;

                    return;

                }

                this.left.attachChild(newNode);

                return;

            } 


            if (this.right == null) {

                this.right = newNode;

                return;

            }


            this.right.attachChild(newNode);

        }

    }

}


查看完整回答
反对 回复 2021-08-25
  • 1 回答
  • 0 关注
  • 135 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信