创建一个名为" 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();
}
}