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

实现compareTo()和Comparable接口

胡浩瀚
2023-03-14

我试图实现Comparable和compareTo(),但似乎无法实现。我一直在尝试不同的方法,但我真的不明白。我知道我应该实现可比较的接口,并且我需要在使用它之前创建方法compareTo()(对我来说很奇怪,从python到面向对象编程)。

我希望它能比较两个人的年龄,所以我试着编写如下所示的代码,但似乎我不能使用compareTo()。我收到错误消息:“此方法必须返回int类型”,但在我看来,我只返回1、-1和0,它们是int?

此外,我知道最后的打印行是错误的。我如何更改它,例如:“Name1,25岁,比Name2老,21岁”。在python中,我可以从列表中提取2个特定值并将它们与给定的方法进行比较;我不知道如何在Java中提取2个不同的值。

import java.util.ArrayList;
import java.util.Random;

class Human implements Comparable<Human>{

    int age;
    String name;

    public Human (int myAge, String myName) {
        name = myName;
        age = myAge;

    }

    public Human() {
        this(randomAge(),randomName());
    }

    public int compareTo(Human o) {
        if (this.age > o.age) {
            return 1;
        }
        if (this.age < o.age) {
            return -1;
        }
        if (this.age == o.age) {
            return 0;
        }
    }

    protected static int randomAge() {
        Random randomGenerator = new Random();      
        return randomGenerator.nextInt(99);
    }

    protected static String randomName() {
        Random randomGenerator = new Random();
        return "Name"+randomGenerator.nextInt(15);
    }

    public int getAge(){
        return age;
    }

    public String getName() {
        return name;
    }

    public String toString() {
        return "\nName: " + name + "\nAge: " + age + " yrs old\n";
    }

    public static void main (String[] args) {

        ArrayList<Human> randomHumans = new ArrayList<Human>();
        for (int j=0;j<2;j++) {
            Human randomPerson = new Human();
            randomHumans.add(randomPerson);
        }
        System.out.println(insert.something.here);
    }

}

共有1个答案

胡泓
2023-03-14

所以使用三个if语句是行不通的,这就是为什么我可以编写一个if/elessif/eless语句来代替,但另一个更简单的解决方案是在compareTo(Man o)-方法

return this.age - o.age

然后进行最后的打印;

int b = randomHumans.get(0).compareTo(randomHumans.get(1));

if (b>0) {
    System.out.println(randomHumans.get(0).getName()+", "+randomHumans.get(0).getAge()+" yrs old, is older than "+randomHumans.get(1).getName()+", "+randomHumans.get(1).getAge()+" yrs old.");
}
else if (b<0) {
    System.out.println(randomHumans.get(0).getName()+", "+randomHumans.get(0).getAge()+" yrs old, is younger than "+randomHumans.get(1).getName()+", "+randomHumans.get(1).getAge()+" yrs old.");
}
else {
    System.out.println(randomHumans.get(0).getName()+", "+randomHumans.get(0).getAge()+" yrs old, is just as old as "+randomHumans.get(1).getName()+", "+randomHumans.get(1).getAge()+" yrs old.");
}
 类似资料:
  • 我面临一个java泛型的问题,我的计划是实现一个二叉查找树(key 中的if语句不被接受,我认为这是因为我重写了comareTo,但是我应该如何比较泛型? 还尝试了而不是,结果相同。 最好的问候 编辑:编译器说:在这一行的多个标记-比较类型中的方法comareTo(捕获#1-of?)不适用于参数(可比)-行断点: KeyValPair[line: 39]-comareTo(KeyValPair)

  • 我知道在接口<代码>可比中有一个方法 并发现Comparable还返回一个值int,并且有自己的实现,而不需要在实现类中重写它。 例如,这个例子:

  • 这似乎很奇怪,这并不像我预期的那样有效。我编写了一个简单的java类,它实现了可比接口并重写了compareTo()方法。但是,它不允许我传递Object以外的特定类型的参数。我在网上查看了其他人的代码,他们确实使用了其他类型的对象,我将他们的代码复制到eclipse中,但我仍然得到了同样的错误。 我的问题是;我必须做什么来比较这个对象和类型的对象,让我们说Person。比较器接口(compare

  • 我有一个银行账户程序,实现了一个扩展到支票账户和储蓄账户子类的银行账户超类。 每个账户有四个属性:名字、姓氏、社会保障和余额。 我有一个BankDatabase类,它创建了一个新的ArrayList来存放这些对象。 我想排序这个ArrayList使用比较接口和comareTo()方法。 我实现了与我的超类类似的功能: 我写了下面的comareTo()方法: 我在BankAccount超类中创建了一

  • 主要内容:1 什么是Java Comparable接口,2 Comparable compareTo方法,3 Java Comparable示例:升序,4 Java Comparable示例:倒序1 什么是Java Comparable接口 Java Comparable接口用于对用户定义的类的对象进行排序。该接口在java.lang包下,仅包含一个名为compareTo(Object) 的方法。它仅提供单个排序序列,意味着,您只能基于单个数据成员对元素进行排序。例如,可以是编号,名称,年龄或其

  • 问题内容: 我想定义一个实现通用Comparable接口的类。在课堂上,我还定义了一个通用类型元素。为了实现该接口,我将比较委托给。这是我的代码: 当我尝试对其进行编译时,会出现以下错误信息: 谁能告诉我原因以及如何解决? 问题答案: (不带任何类型参数)是原始类型,因此: 我们可以通过任何形式的到。例如,这将编译: 该方法返回而不是,这将导致编译错误。 在第一点下的示例中,传递给后,我们会错误地