我试图实施compareTo()
和compareTo()
,但似乎无法让它发挥作用。我一直在尝试不同的方法,但我并没有真正得到它。我知道我应该实现类似的接口,并且我需要在使用它之前创建方法int
(对我来说很奇怪,从python到面向对象的编程)。
我想比较两个人的年龄,所以我尝试编写如下所示的代码,但似乎我不能使用compareTo()。我收到错误消息:"此方法必须返回一个int类型",但正如我所看到的,我只返回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}}
答案 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.");
}