我正在自学Java,还不太了解这个问题。假设我有两个对象,想在一个方法中比较它们。 如何在不更改方法中参数数量的情况下做到这一点?
我似乎无法将另一只动物的参数带入方法中,因为它仅带有参数。与可比产品有关系吗?
public class Animal {
private double size;
private double length;
public Animal(double size, double length) {
this.size = size;
this.length = length;
}
public compareSize(Animal animal) {
//if (dog.size < animal.size)
//return 0;
//return 1;
}
public static void main(String[] args) {
Animal cat = new Animal(100.0,30.1);
Animal dog = new Animal(200.0, 09.5);
System.out.println(dog.compareSize(cat));
}
}
答案 0 :(得分:2)
您在类compareSize
中定义方法Animal
。
在Java(以及所有其他OOP语言)中,当您在对象上调用方法时,可以使用this
关键字来访问该对象。
调用dog.compareSize(cat)
时,是在compareSize
对象上调用dog
,因此在方法this
中将引用dog
对象。 / p>
因此,您需要比较this.size
和animal.size
。
Comparable界面与此无关。
通过定义compareTo
方法,Comparable接口使您的类具有可比性。必须使用Collections.sort()之类的有用方法。
此外,您需要在compareSize
方法中定义返回类型,其签名应为:
public int compareSize(动物)
答案 1 :(得分:0)
您可以按以下方式重写方法:
public int compareSize(Animal animal){
if (this.size < animal.size){
return -1;
}else if(this.size > animal.size){
return 1;
}
return 0;
}
这里发生的事情是,当您使用“ this”时,它是指调用方法的对象中的大小。 即如果您正在执行dog.compareSize(cat),则在dog对象中调用compareSize。 因此狗对象内部的this.size将返回200.0
如果您使用cat.compareSize(dog),则this.size将返回100.0
您将如何使用它
public static void main(String[] args){
Animal cat = new Animal(100.0,30.1);
Animal dog = new Animal(200.0, 09.5);
System.out.println(dog.compareSize(cat));
}
尽管在使用比较器的编码标准方面会更好,但是您可以在此处详细了解比较器:https://www.baeldung.com/java-comparator-comparable,但是您必须将两个参数传递到比较器中。
答案 2 :(得分:0)
您的compareSize()
方法可以简单地是:
public int compareSize(Animal animal){
return Double.compare(this.size, animal.size);
}