问题:等于的对象?
制作一个LandTract类,它有两个字段:一个用于道的长度,另一个用于宽度。该类应该有一个返回该区域的方法,以及一个equals方法和一个toString方法。在程序中演示课程,要求用户输入两片土地的尺寸。程序应该显示每一片土地的面积,并指出这些土地是否大小相同。
LandTract类
public class LandTract {
private double width,
length;
public LandTract(double width, double length) {
this.width = width;
this.length = length;
}
public double getLength() {
return length;
}
public LandTract(double length) {
this.length = length;
}
public double tractArea(double width, double length) {
return width * length;
}
public String equal(LandTract zt, LandTract lt){
String dec;
if(zt.equals(lt)){
dec ="yes";
}else dec="NO";
return dec;
}
public String toString(){
return "Area is " + width*length;
}
}
DemoTract类
import java.util.Scanner;
public class DemoTract {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("Please Enter First Tract Width");
double width=scan.nextDouble();
System.out.println("Please Eter First Trach Length ?");
double length=scan.nextDouble();
LandTract lt1 = new LandTract(width,length);
System.out.println("Please Enter Secont Tract Width");
double width2=scan.nextDouble();
System.out.println("Please Enter Secoinf Tract Length");
double length2 = scan.nextDouble();
LandTract lt2 = new LandTract(width2,length2);
System.out.println("First Tract " + lt1);
System.out.println("Secon Tract "+ lt2);
System.out.println(lt2.equal(lt1, lt2));
}
}
对象等于永远是假的,有什么不对吗?
另外,tractArea不应该采取任何说法:它应该返回LandTract的区域。你的平等方法应该只有一个参数:它应该比较LandTract(即'this')与另一个。它应该返回一个布尔值,而不是一个字符串。最后,平等方法的要点是将'this'的宽度和高度与其他LandTract的宽度和高度进行比较。 equals()不会这样做(嗯,如果你是averrode,那么它会这样做)。 –
'LandTract'需要重写'Object#equals(Object obj)',它返回'boolean'。目前'zt.equals(lt)'使用'Object'的'.equals(...)'方法,它只是检查'LandTract' *引用*(不记得确切的词)之间的相等性。 –
你是什么意思“同等大小”?尺寸必须相同,还是只有区域?如果问题是检查这些区域是否相等,那么使用“equals”方法是不好的做法。只有当两个对象的所有公共可用特性(通过某种定义)相同时,“equals”才是真实的,并且这里的长度是公开可用的。在这里,我想你只需要'zt.tractArea()== lt.tractArea()',或者可以与一个epsilon进行比较以避免浮点精度问题。 – ajb