比较两个类型圆的对象



创建一个名为" circle"的Java类,该类实现Java.io.serializable接口,并根据半径建模一个圆圈。半径不能小于零。实现半径的Getter和设定器方法。还包括在圆形类中的to绳覆盖。创建类'比较器,该比较器比较类型圆的两个对象。

这就是我到目前为止的

import java.io.Serializable;

public class Circle implements Serializable, Comparable<Circle> {
private int radius = 1;
public Circle() {
}

public Circle(int radius) {
    setRadius(radius);
}
public void setRadius(int v) {
    if (v > 0) {
        this.radius = v;
    }
}
public int getRadius() {
    return this.radius;
}

@Override
public String toString() {
    return "Circle{" + "radius=" + radius + '}';
}
@Override
public int compareTo(Circle o) {
    //no idea what to put here
}

}

这个我的比较器类

 import java.util.Comparator;
public class CompareCircle implements Comparator<Circle> {
CompareCircle(Circle c1, Circle c2) {
}
@Override
public int compare(Circle o1, Circle o2) {
    if (o1.getRadius() > o2.getRadius()) {
        return o1.getRadius();
    } else {
        return o2.getRadius();
    }
}
}

我的问题是我是否正确或不这样做?

首先,您不需要实现Comparable或覆盖compareTo()

根据文档,这是compare()应该返回的内容:

返回一个负整数,零或正整数,因为第一个参数小于,等于或大于第二个。

您可以使用integer.compare()满足这些要求:

返回: 值0如果x == y;如果x&lt,则小于0的值;y;如果x> y

大于0的值
import java.util.Comparator;
public class CompareCircle implements Comparator<Circle> {
    @Override
    public int compare(Circle o1, Circle o2) {
        return Integer.compare(o1.getRadius(), o2.getRadius());
    }
}

要比较,您需要创建一个CompareCircle实例。您可以将其与collections.max()一起检索最大的对象:

import java.util.ArrayList;
import java.util.Collections;
public class Main {
    public static void main(String[] args){
        ArrayList<Circle> list = new ArrayList<Circle>() {{
            add(new Circle(4));
            add(new Circle(7));
            add(new Circle(2));
        }};
        CompareCircle comp = new CompareCircle();
        Circle c = Collections.max(list, comp);
        System.out.println(c.getRadius());
    }
}

ouput:

7

,JB指出的是Circle类,如果使用COMERATOR:

,则不需要实现Comparable
public class Circle implements Serializable /*, Comparable<Circle> */{

CompareCircle中,您可以丢弃构造函数(实际使用默认的构造函数CompareCircle())。
compare方法还应处理两个相等圆的情况:

@Override
public int compare(Circle o1, Circle o2) {
    //you may want to consider cases where one circle or both are null 
    if (o1.getRadius() > o2.getRadius()) {
        return o1.getRadius();
    } else if (o1.getRadius() == o2.getRadius()) {
        return 0;
    }           
       return o2.getRadius();
    }   
}

相关内容

  • 没有找到相关文章

最新更新