当前位置: 首页 > 知识库问答 >
问题:

比较到整数

艾自强
2023-03-14

我是泛型新手,想解决一个小问题。

我想给两个类型为“V扩展可比”的对象给类ComparePredicate,然后检查方法“isOk”,如果树类的int值“值”在这两个对象之间。我选择了comareTo方法,因为整数和V应该是可比较的类型,但是编译器给出了一个错误。我认为这只是一个句法问题。

那么,我需要如何正确地书写它呢。希望你们能帮我。谢谢你的回答。

类比较谓词

public class ComparePredicate<V extends Comparable<V>> implements TreePredicate<V> {

    V minEle;
    V maxEle;

    public ComparePredicate(V minEle, V maxEle) {
        this.minEle = minEle;
        this.maxEle = maxEle;
    }

    @Override
    public boolean isOk(Tree<V> tree) {

        return minEle.compareTo(Integer.valueOf(tree.getValue())) > 0 &&
                maxEle.compareTo(Integer.valueOf(tree.getValue())) < 1;
        //COMPILER ERROR: "The method compareTo(V) in the type Comparable<V> is not applicable for the arguments (Integer)"

        return false;
    }

}

类树

public class Tree<T> {
    private int value;
    private final Tree<T> left;
    private final Tree<T> right;

    public Tree(int v, Tree<T> l, Tree<T> r) {
        this.value = v;
        this.left = l;
        this.right = r;
    }

    public int getValue() {
        return this.value;
    }

    public Tree<T> getLeft() {
        return this.left;
    }

    public Tree<T> getRight() {
        return this.right;
    }
}

共有1个答案

拓拔玺
2023-03-14

更改树类

static class Tree<T> {
    private T value;
    private final Tree<T> left;
    private final Tree<T> right;

    public Tree(T v, Tree<T> l, Tree<T> r) {
        this.value = v;
        this.left = l;
        this.right = r;
    }

    public T getValue() {
        return this.value;
    }

    // getters ...

}

并且也改变isOk()

    @Override
    public boolean isOk(Tree<V> tree) {
        return minEle.compareTo(tree.getValue()) <= 0 &&
                maxEle.compareTo(tree.getValue()) >= 0;
    }
 类似资料:
  • 问题内容: 我是Java的新手,我刚刚读了一个整数类的变量,可以用API的三种不同方式来描述。我有以下代码: 这是在循环内,只是输出。 我的目标是弄清楚如何查看整数值。 我知道这是正确的方法吗?还是它? 我知道这是不正确的。这是正确的吗?是否存在值比较运算符? 问题答案: 整数是自动拆箱的,因此您可以执行

  • 问题内容: 在Java中整数比较是棘手的,因为和表现不同。我明白了。 但是,如本示例程序所示, (第4行)的 行为不同于 (第3行) 。为什么是这样?? 结果 问题答案: 从JLS 如果装箱的值p为true,false,字节或\ u0000到\ u007f范围内的char或-128到127(含)之间的整数或短数,则令r1和r2为p的任何两次拳击转换。r1 == r2总是这样。 理想情况下,将给定的

  • 我有一个充满整数的列表: 现在我想将最高分数与每个分数进行比较,看看哪个分数最高。直觉上,我试着这样做: 然而 所有人都告诉我错误: Compariable和int操作数类型不兼容 然而,这似乎是可行的: 那怎么可能呢? 为什么Java允许将int设置为集合。max(集合),但不允许将int与集合进行比较。最大值(集合)?

  • 我有以下代码: 结果如下: 但是将的类型更改为将产生不同的输出,例如: 新的输出: 怎么会这样?为什么第一个示例代码没有输出?

  • 问题内容: 我必须比较两个对象(不是)。比较它们的规范方法是什么? 我可以想到: 该运营商只比较基准,因此这将仅适用于较低的整数值的工作。但是也许自动装箱开始了…? 这看起来像一个昂贵的操作。是否以此方式计算出哈希码? 有点冗长… 编辑: 谢谢您的答复。尽管我现在知道该怎么办,但事实已分布在所有现有答案(甚至是已删除的答案)上,我也不知道该接受哪个答案。因此,我将接受最佳答案,即所有三种比较可能性

  • 比较函数是一个函数,它接受两个参数a和b,并返回一个描述其顺序的整数。如果a小于b,则结果为负整数。如果a大于b,则结果为某个正整数。否则,a和b相等,结果为零。 此函数通常用于参数化来自标准库的排序和搜索算法。 实现字符的比较功能相当容易;只需减去参数: 这是因为通常假设两个字符之间的差适合一个整数。(注意,此假设不适用于的系统) 这种技巧无法用于比较整数,因为两个整数之间的差通常不适合一个整数