我这里有一个矩形类,我需要覆盖compareTo方法,以便它根据矩形的周长进行比较。我知道目前的compareTo方法我错了,但我不知道如何解决它。
这是代码:
public class Rectangle implements Comparable<Rectangle> {
private double length;
private double width;
private double perimeter;
public Rectangle(double l, double w){
this.length = l;
this.width = w;
}
public double getLength() {
return length;
}
public double getWidth(){
return width;
}
public void setLength(double l){
length= l;
}
public void setWidth(double w){
width = w;
}
public double getPerimeter(){
perimeter = 2*(width + length);
return perimeter;
}
@Override
public int compareTo(Rectangle other){
String t=Double.toString(perimeter);
String o=Double.toString(other.perimeter);
int comp = t.compareTo(o);
return comp;
}
@Override
public String toString(){
return "Rectangle: "+ width +" by "+ length ;
}
}
答案 0 :(得分:2)
试试这个
public int compareTo(Rectangle otherRectangle) {
return Double.compare(this.getPerimeter(), otherRectangle.getPerimeter());
}
答案 1 :(得分:1)
试试这个: 您需要使用getPerimeter,因为您的计算逻辑就在那里:
@Override
public int compareTo(Rectangle other){
return Double.compare(getPerimeter(), other.getPerimeter());
}
答案 2 :(得分:1)
所有其他答案都是正确的。这个答案只是添加了一个矩形数组,并使用java.util.Array.sort
根据它们的周长对它们进行排序,以证明比较器正在工作。此外,周长的计算将移至构造函数中,而不是getPerimeter
方法。
import java.util.Arrays;
public class Rectangle implements Comparable<Rectangle> {
private double length;
private double width;
private double perimeter;
public Rectangle(double l, double w){
this.length = l;
this.width = w;
perimeter = 2 *(width+length);
}
public double getLength() {
return length;
}
public double getWidth(){
return width;
}
public void setLength(double l){
length= l;
}
public void setWidth(double w){
width = w;
}
public double getPerimeter(){
perimeter = 2*(width + length);
return perimeter;
}
@Override
public int compareTo(Rectangle other){
return Double.compare(perimeter, other.perimeter);
}
@Override
public String toString(){
return "Rectangle: "+ width +" by "+ length ;
}
public static void main(String args[]) {
Rectangle [] arrayOfRectangles = new Rectangle [3];
arrayOfRectangles[0] = new Rectangle(1.0,1.0);
arrayOfRectangles[1] = new Rectangle(6.0,5.0);
arrayOfRectangles[2] = new Rectangle(2.0,3.0);
Arrays.sort(arrayOfRectangles);
for (int i = 0; i < 3; i++) {
System.out.println(arrayOfRectangles[i]);
}
}
}
答案 3 :(得分:0)
很少 -
您可以在构造函数中评估Rectangle
的参数而不是getter
public Rectangle(double l, double w) {
this.length = l;
this.width = w;
this.perimeter = 2 * (this.width + this.length);
}
然后你的perimeter
getter和setter就像 -
public double getPerimeter() {
return perimeter;
}
public void setPerimeter(double perimeter) {
this.perimeter = perimeter;
}
您可以使用Double
类compare
方法进行比较
@Override
public int compareTo(CompareToRectangle other) {
return Double.compare(this.perimeter, other.perimeter);
}
您可以使用测试方法测试相同的 -
public static void testRectangle() {
Rectangle first = new Rectangle(2.00, 3.00);
Rectangle second = new Rectangle(4.00, 3.00);
if (first.compareTo(second) == 0) {
System.out.println("Similar rectangles.");
} else if(first.compareTo(second) == 1) {
System.out.println("First rectangle bigger than second.");
} else {
System.out.println("Second rectangle is bigger than first.");
}
}