实现compareTo()和Comparable-interface

时间:2017-11-06 10:41:53

标签: java comparable compareto

我试图实施compareTo()compareTo(),但似乎无法让它发挥作用。我一直在尝试不同的方法,但我并没有真正得到它。我知道我应该实现类似的接口,并且我需要在使用它之前创建方法int(对我来说很奇怪,从python到面向对象的编程)。

我想比较两个人的年龄,所以我尝试编写如下所示的代码,但似乎我不能使用compareTo()。我收到错误消息:&#34;此方法必须返回一个int类型&#34;,但正如我所看到的,我只返回1,-1和0,其中 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); } }

另外,我知道最后的打印行是错误的。我怎样才能更改它,例如:&#34; Name1,25岁,比Name2,21岁和#34;年龄大。在python中,我可以从列表中提取2个特定值,并将它们与某个给定的方法进行比较;我不确定如何在Java中为2个不同的值进行提取。

{{1}}

1 个答案:

答案 0 :(得分:0)

因此使用三个if语句不起作用,这就是我可以编写if / else if / else语句的原因,但另一个更简单的解决方案就是在compareTo(Human 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.");
}