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

比较由实现“比较”的自定义对象存储的两个私有变量

楚嘉
2023-03-14

我试着选一个段落,通过打印出前三个单词来找到它的“意义”。去掉所有语法单词和空白后,我使用Hashmap计算每个单词的出现次数。然后,由于我不知道更好的方法,我只是创建了自己的小自定义对象来存储单词、键和出现次数、值,就像Hashmap一样,但我的老师建议实现Comparable,但我遇到了一个问题。我有两个问题,一个在我“修复”另一个时出现。问题在于Pair类中的compareTo函数和另一个类中的Sort()函数。当我让compareTo函数返回int.并且它不允许我使用compareTo函数时,我得到了一个“pair不能转换为boolean”。

compareTo()我也知道compareTo应该返回int来重写,但当我跳到这里寻求帮助时,代码就是这样的。类原型也是

    public class Pair implements Comparable<Pair>{
    ///.... variables, getters, setters, etc.

    @Override
    public boolean compareTo(Pair o) {    // ERROR HERE

    boolean z = false;

    if (this.getValue() > o.getValue()) {
        z = true;
    }
    else{
        z = false;
    }
    return false; 
}

以及使用Pair对象的sort/countwords函数。

public Pair[] sort(Pair[] arr) {
    int max;
    for (int i = 0; i < arr.length; i++) {
        // Assume first element is min
        max = i;
        for (int j = i + 1; j < arr.length; j++) {
            if (arr[j],compareTo(arr[max])  == true){ //ERROR HERE
                max = j;
            }
        }
        if (max != i) {
            final Pair temp = arr[i];
            arr[i] = arr[max];
            arr[max] = temp;
        }
        System.out.println(arr[i].getKey());// I print the in ascending order
    }
    return arr; 
}

public void countWords() {
    Map<String, Integer> m = new HashMap(); // set up a Hashmap to get the occurance of the words
    for (String a : dataList) {
        Integer freq = m.get(a);
        m.put(a, (freq == null) ? 1 : freq + 1);
    }
    //create and fill array of custom Pair (key, value) objects, so it becomes sortable
    int count = 0;
    Pair[] pairs = new Pair[m.size()];
    for (String key : m.keySet()) {
        Pair pair = new Pair(key, m.get(key));
        pairs[count] = pair;
        count++;
    }
    Pair[] sortedPairs = sort(pairs);
}

共有3个答案

石博艺
2023-03-14

compareTo必须返回一个int,否则您实际上并没有实现接口中定义的抽象方法。

根据Pair类中的getValue()方法返回的类型,您很可能将该方法定义为:

public int compareTo(Pair o) {    

   return getValue().compareTo(o.getValue());
}
邹开畅
2023-03-14

compareTo()必须返回int。它返回-1(object1

if ( pairA.compareTo(pairB) > 0 ) // if pairA > pairB
查修谨
2023-03-14

compareTo()必须返回一个符合以下条件的int:

如果当前对象值小于另一个,则返回-1,如果它们相等,则返回0,如果它们更大,则返回1。

将您的方法更改为(假设getValue()返回int):

@Override
public int compareTo(Pair o) {
       return (this.getValue() < o.getValue()) ? -1 : (this.getValue() > o.getValue()) ? 1 : 0 ;
    }

请注意,如果getValue()返回其他对象类型,则可以使用该对象的默认实现compareTo()。因此,如果getValue()将返回例如一个BigDecimalInteger对象等,您可以使用返回这个。getValue()。比较(o.getValue())

然后,在使用该方法时,更改行

if (arr[j],compareTo(arr[max])  == true)

if (arr[j].compareTo(arr[max])  == 0 ) //they are equal

 类似资料:
  • 我需要比较insert方法中的两个对象。但我无法弄清楚在哪里以及如何实现可比或比较器。我的代码如下所示: 这是我为二叉树创建的节点。

  • 在爪哇中。如果我们必须将一个对象与另一个对象进行比较。我们比较该对象中的每个字段。 学生 1 对象具有标记 1、标记 2、标记 3、名称、年龄作为字段。学生 2 对象具有标记 1、标记 2、标记 3、名称、年龄作为字段。因此,要检查2名学生是否相等...我们比较每个字段。 但是,如果 Student 对象有许多字段,该怎么办?学生1对象有标记1,标记2,标记3,名称,年龄,地址,颜色,类,国家,部

  • 创建一个名为“Circle”的Java类来实现Java。io。可串行化接口,并基于半径对圆进行建模。半径不能小于零。实现radius的getter和setter方法。还包括在circle类中重写toString。创建类的比较器,用于比较Circle类型的两个对象。 这就是我目前所拥有的 这是我的比较器类 我的问题是我做得对还是不对?

  • 对于PostgreSQL(v9.5),JSONB格式提供了极好的机会。但现在我只能做一个相对简单的手术; 比较两个jsonb对象;查看一个文档与另一个文档相比有什么不同或缺失。 到目前为止我所拥有的 应该返回第1行与第2行的差异: 相反,它还返回重复项(

  • 使用RestAssured,我试图比较两个JSON对象。 示例:第一个JSON来自excel,我将其作为字符串读取并存储 第二个 JSON 是返回响应对象的响应,该响应对象实际上是一个 JSON 我想将这两者作为JSON对象进行比较,因为当我将响应转换为String并尝试进行比较时,如果JSON模式的顺序发生变化,我的断言就会失败。 我尝试了将字符串转换成JSON的方法,但是没有找到任何方法。有人

  • 我目前正在创建一个设计不佳的战舰游戏,我已经达到了一个点,我不知道如何从另一个对象访问一些数据。 我有一个板类,它创建两个大小为100的数组。我有一个玩家类,它有属于他们的两块板的实例(他们的板和敌人的板(击中,错过,空)) 我所遇到的问题是,如何使两个玩家的棋盘同步,但在棋盘的功能内,在玩家的内部。。。 我的职能应该是脱离董事会,以便 但是,在player1.boards的功能中,如何访问pla