問題:等於的對象?
製作一個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