矩形面向对象开发 - Equals()方法

时间:2013-04-16 20:36:39

标签: java oop class equals

需要一些帮助。在“类和面向对象的开发”上工作,可以在教科书中使用我的逻辑和代码的一些帮助。

问题:我被要求修改我之前的Rectangle类示例以覆盖equals()和toString()方法。当它们具有相同的长度和宽度时,两个矩形相等。

我的方法:我试图改变它来做这件事,然后决定按区域比较更容易,而不是按宽度和长度进行比较,所以下面是我所拥有的远。如果您有任何想法可以帮助我,请告诉我。有一个先前的equals()方法示例,它比较圆的半径,但在比较2个不同的东西时没有帮助。谢谢所有人!如果你想知道为什么他们都不是他们自己的单独文件,我还没有在章节中到达那么所以它很多看我知道; 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();
}

}

4 个答案:

答案 0 :(得分:2)

我不认为在equals方法中比较区域是一个好主意,因为2x8的矩形将等于4x4的矩形,因为两个区域都是16.这与您的要求相矛盾:

  

当它们具有相同的长度和宽度时,两个矩形相等。

此处,您的r2变量未定义。但除此之外,equals方法不应该比较其他两个对象,它应该将this对象与另一个对象进行比较。

如果true对象是r,并且此矩形的长度与另一个矩形的长度匹配,并且此矩形的宽度与另一个矩形的宽度匹配,则应返回Rectangle

答案 1 :(得分:2)

您的equals方法应始终具有以下结构:

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

这是因为您不希望对空引用执行操作(这会引发错误),并且this无论如何都不能等于null。其次:如果r不是矩形类的实例,我们可以在必须执行其他操作之前退出,因为Rectangle不等于String或Circle。

现在,回答你的问题:如果你想纯粹按宽度和长度检查相等性,我会写这样的方法:

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;

您的代码会产生正面,而这些矩形的方向也不同。

答案 2 :(得分:0)

当长度和宽度相同时,两个矩形相等。

以下这些矩形是否相同?

100x100

200x50

喂!两者都有相同的区域吗?

因此,简而言之,您没有使用&&来查看两者的长度和宽度是否相等,或者您可以比较两个矩形的.toString()以确定它们是否准确。

答案 3 :(得分:0)

添加其他答案(先阅读)

如果您要比较“物理”对象(例如木块),那么您可能还需要比较长度和宽度以及宽度和长度。用户输入的方向可能以不同方式提交给两个相同的对象。在阅读您的要求时请考虑这一点。