如何覆盖基于周长进行比较的矩形类中的compareTo方法?

时间:2017-01-28 03:50:01

标签: java

我这里有一个矩形类,我需要覆盖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 ;
        }




}

4 个答案:

答案 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)

很少 -

  1. 您可以在构造函数中评估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;
    }
    
  2. 您可以使用Doublecompare方法进行比较

    @Override
    public int compareTo(CompareToRectangle other) {
        return Double.compare(this.perimeter, other.perimeter);
    }
    
  3. 您可以使用测试方法测试相同的 -

    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.");
        }
    }