需要一些帮助。在“类和面向对象的开发”上工作,可以在教科书中使用我的逻辑和代码的一些帮助。
问题:我被要求修改我之前的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();
}
}
答案 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)
当长度和宽度相同时,两个矩形相等。
以下这些矩形是否相同?
和
喂!两者都有相同的区域吗?
因此,简而言之,您没有使用&&
来查看两者的长度和宽度是否相等,或者您可以比较两个矩形的.toString()
以确定它们是否准确。
答案 3 :(得分:0)
添加其他答案(先阅读)
如果您要比较“物理”对象(例如木块),那么您可能还需要比较长度和宽度以及宽度和长度。用户输入的方向可能以不同方式提交给两个相同的对象。在阅读您的要求时请考虑这一点。