gpt4 book ai didi

java - 赋值 - 创建一个通用类并实现 Comparable(Java)

转载 作者:行者123 更新时间:2023-11-29 07:10:11 24 4
gpt4 key购买 nike

我必须使用 Java 泛型制作一个 prog,并实现 Comparable。代码基本上应该比较 3 个人的年龄并告诉你是真是假。

我们必须在我们的类中包含“int age”变量。

这是我所做的:

@SuppressWarnings("rawtypes")
public class Person implements Comparable<Person>{

int age;

//He said you should have ("int age"), but I dont know how to do this without using generics?

public Person(int age)
{
this.age = age;
}

public int compareTo(Person o) {
return compareTo(o);

}


}

还有我的比较类:

public class OrderedTrio<T> {

@SuppressWarnings("unused")
public static void main(String[] args)
{
//Create Person object
Person personA = new Person(10);
Person personB = new Person(20);
Person personC = new Person(30);

System.out.println(allEqual(personA, personB, personC));

//Create Employee object
}

//All Equal Method: Returns true if all 3 items are equal according to their equals method
public static boolean allEqual(Person personA, Person personB, Person personC)
{
if(personA.compareTo(personB) ==0 && personB.compareTo(personC)==0) //If A=B, B=C then A=C
return true;
else
return false;
}
//Sort Method: Orders items

//ToString Method: Output format: Item1, 2, 3

}

当我运行这些时,我得到这个错误: 线程“main”中的异常 java.lang.StackOverflowError

我认为错误在 return compareTo(o) 中,但我不明白如何将我的 CURRENT 对象与传入的对象进行比较。

我也不知道“int age”变量有什么用,它不会让我将 int 与 Person 对象进行比较。

最佳答案

是的,这会导致堆栈溢出。您的 compareTo 函数中有无限递归,一遍又一遍地调用自己。

compareTo 函数应该返回一个 int,表示与传入的对象相比,您要赋予此对象的“值”。所以你说你想根据年龄比较一个人,compareTo 应该简单地返回一个基于年龄变量的 int,如下所示

compareTo(Person o){
//i'm younger
if (this.age < o.age)
return -1;
//i'm older
if (this.age > o.age)
return 1;
//same age
return 0;
}

现在,当您通过 PersonA.compareTo(PersonB) 比较两个人时,它应该返回一个值,表明 PersonA 小于 (-1) 等于 (0) 或大于 (1) PersonB

此解决方案旨在展示您尝试做的事情的一般概念,更有效的解决方案是将彼此的值相减并返回,例如

return age - o.age;

关于java - 赋值 - 创建一个通用类并实现 Comparable(Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14633679/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com