【问题标题】:Java: Special type, bad operand type for binary operatorJava:二元运算符的特殊类型,错误的操作数类型
【发布时间】:2019-04-21 08:45:07
【问题描述】:

我正在用 java 处理树。我目前正在研究检索和插入方法。 方法如下:

public void insert(E item) {


    if(item <= node.item){
        if(node.left == null){
            node.left = new TreeNode<E>(item);
        }
        else{
            insert(node.left.item);
        }
    }
    else{
        if(node.right == null){
            node.right = new TreeNode<E>(item);
        }
        else{
            insert(node.right.item);
        }
    }

    root.item = item;
}

public E retrieve(E item) {

    if(item == node.item){
        return item;
    }
    else if(item <= node.item){
        if(node.left == null){
            return null;
        }
        else{
            return retrieve(node.left.item);
        }
    } else{
        if(node.right == null){
            return null;
        }
        else {
            return retrieve(node.right.item);
        }
    }

}

在上面的代码中,if 语句:

if(item <= node.item)

...给我以下错误:

java: bad operand types for binary operator '<='
first type:  E
second type: E

我有点困惑,因为当我用 compareTo() 切换操作数时,它让我知道结果是布尔值,但我们期待的是 int。我不太确定如何比较它们。或者更确切地说,用什么来比较它们。 求救!

谢谢你, T

【问题讨论】:

  • Java 没有运算符重载。 E 必须是 Comparable(或者您需要 Comparator&lt;E&gt;)。你是如何定义E的?
  • item 的类型是 E... E 是什么?
  • 我不太确定,因为我的老师缺乏提供作业信息。我猜这只是我们老师决定的一种类型: public class BinarySearchTree> extends BinaryTree

标签: java error-handling compiler-errors


【解决方案1】:

给你的老师一个心脏病,让我们先修复他的泛型。这个

public class BinarySearchTree<E extends Comparable<E>> extends BinaryTree<E>

应该是

public class BinarySearchTree<E extends Comparable<? super E>> extends BinaryTree<E>

您可以使用Comparable&lt;T&gt; 进行比较。也就是说,

if(item <= node.item){

应该是

if (item.compareTo(node.item) <= 0)

以此类推,使用item.compareTo 代替&lt;==&gt;

【讨论】:

    猜你喜欢
    • 2014-05-30
    • 1970-01-01
    • 2022-07-01
    • 2018-10-02
    • 1970-01-01
    • 1970-01-01
    • 2016-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多