2013-04-16 87 views
3

需要一些幫助。研究「類和麪向對象的開發」,並可以在教科書中爲我的邏輯和代碼提供一些幫助。面向對象的矩形開發 - Equals()方法

問題:我被要求修改我以前的我的Rectangle類的示例,以覆蓋equals()和toString()方法。兩個長方形的長度和寬度相同時,兩個長方形相等。

我的方法:我試圖改變它這樣做,然後再決定它會更容易通過的地區來比較,而不是通過兩者的寬度和長度進行比較,所以下面是我到目前爲止所。如果您有任何想法可以幫助,請告訴我。有一個比較圓的半徑的equals()方法的前面的例子,但在比較兩個不同的事物時並不幫助。感謝所有!如果你想知道爲什麼他們都沒有自己單獨的文件,我還沒有在本章到達那裏又那麼它的很多看我知道,P

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package chapter8javaExamples; 

/** 
* 
* @author Eric 
*/ 
public class Rectangle { 
    private double length, width; 


/** 
* constructor 
* pre: none 
* post: A rectangle class is created. 
*/ 
public Rectangle() { 
    length = 2; //default length 
    width = 4; //default width 
} 


/** 
* constructor 
* pre: none 
* post: A rectangle object is created with length and width. 
*/ 
public Rectangle (double l, double w) { 
    length = l; 
    width = w; 

} 


/** 
* Changes the length of the rectangle 
* pre: none 
* post: Length has been changed. 
*/ 
public void setLength (double newLength) { 
    length = newLength; 
} 




/** 
* Changes the width of the rectangle. 
* pre: none 
* post: Width has been changed. 
*/ 
public void setWidth (double newWidth) { 
    width = newWidth; 
} 


/** 
* Returns the length of the rectangle. 
* pre: none 
* post: The length of the rectangle has been returned. 
*/ 
public double getLength() { 
    return(length); 
} 


/** 
* Returns the width of the rectangle. 
* pre: none 
* post: The width of the rectangle has been returned. 
*/ 
public double getWidth() { 
    return(width); 
} 


/** 
* Returns the area of rectangle 
* pre: none 
* post: The area of the rectangle is returned 
*/ 
public double area() { 
    double triArea; 

    triArea = length * width; 
    return(triArea); 
} 


/** 
* Returns the perimeter of the rectangle 
* pre: none 
* post: The perimeter of the rectangle is returned 
*/ 
public double perimeter() { 
    double triPer; 

    triPer = length + width + length + width; 
    return(triPer); 
} 


/** 
* Displays the formula for area of a rectangle. 
* pre: none 
* post: The formula is displayed. 
*/ 
public static void displayAreaFormula(){ 
    System.out.println("The formula for the area of a rectangle is a=l*w"); 
} 

/** 
* Determines if the object is equal to another 
* Circle object. 
* pre: c is a Circle object. 
* post: true has been returned if the objects have 
* the same radii, false otherwise. 
*/ 
public boolean equals(Object r) { 
    Rectangle testObj = (Rectangle) r; 
    Rectangle testObj2 = (Rectangle) r2; 

    if (testObj.getArea() == area && testObj2.getArea == area()) { 
     return(true); 
    } else { 
     return(false); 
    } 
} 


/** 
* Returns a String that represents the Circle object. 
* pre: none 
* post: A string representing the Circle object has 
* been returned. 
*/ 
public String toString(){ 
    String rectangleString; 

    rectangleString = "Rectangle has the Area " + length*width; 
    return(rectangleString); 
} 

/** 
* 
* @param args 
*/ 
    public static void main(String [] args){ 
    Rectangle spot = new Rectangle(); 
    Rectangle spot2 = new Rectangle(5, 9); 

    System.out.println("Area is: " + spot.area()); 
    System.out.println("Perimeter: " + spot.perimeter()); 
    Rectangle.displayAreaFormula(); 
} 

}

+1

根據您的實施,尺寸(6l x 6w)的矩形與尺寸(12l x 3w)的矩形相同。是對的嗎? – devang

+0

我喜歡你廣泛的文檔。堅持下去。它會幫助你很多:) – RaptorDotCpp

回答

2

我不認爲在比較的區域是在equals方法是一個好主意,因爲一個矩形,它是2x8的就等於一個矩形,它爲4x4,因爲這兩個領域是16.這違揹你的要求:

兩個矩形相等時,他們兩者具有相同的長度和寬度。

在這裏,您的r2變量是未定義的。但除此之外,equals方法不應該比較兩個其他對象,它應該將this對象與另一個對象進行比較。

您應該返回true如果r對象爲Rectangle這個矩形的長度其他矩形的長度相匹配,並且這個矩形的寬度其他矩形的寬度相匹配。

0

兩個長方形在長度和寬度都相同時相等。

下面這些矩形是否相同?

100x100

200x50

嘿!兩者都有相同的面積嗎?

因此,簡而言之,沒有您使用&&來查看兩者的長度和寬度是否相等,或者您可以比較兩個矩形的.toString() s以查看它們是否準確。

+0

哦,如果有人想知道,我用placehold.it來產生圖片。 – Prasanth

2

你的equals方法應該始終具有以下結構:

public boolean equals(Object r) { 
    if(r == null || !r instanceof Rectangle) return false; 
    // rest of the code 
} 

這是因爲你不想在一個空指令進行操作(這會引發錯誤),而this不能平等無論如何,它們都是null。其次:如果r不是矩形類的實例,我們可以在執行其他操作之前退出,因爲矩形不等於字符串或圓。

現在,讓你的問題:如果你想檢查純粹寬度和長度相等,我會寫的方法是這樣的:

public boolean equals(Object r) { 
    if(r == null || !r instanceof Rectangle) return false; 
    if(length == r.length && width == w.width) return true; 
    return false; 
} 

與此相比,寬度和長度。如果兩者相等,則兩個矩形相等。您正在比較該區域,但這可能會導致誤報。拿這個例子:

Rectangle r1; 
Rectangle r2; 

r1.width = 10; 
r1.length = 5; 

r2.width = 5; 
r2.length = 10; 

你的代碼會產生一個正面的,而這些矩形的方向是不同的。

0

要添加到其他的答案(閱讀這些第一)

如果你是比較「物理」對象(木例如塊),那麼你可能要比較的長度與寬度和寬度與長度,以及。對於兩個相同的對象,用戶輸入的方向可能會以不同方式提交。閱讀您的要求時請考慮這一點。