Java 两种圆型物体的比较
创建一个名为“Circle”的Java类,该类实现Java.io.Serializable接口,并基于radius对圆进行建模。半径不能小于零。实现radius的getter和setter方法。还包括在circle类中重写toString。创建类的比较器,用于比较两个圆圈类型的对象。 这就是我目前所拥有的Java 两种圆型物体的比较,java,compare,comparator,comparable,Java,Compare,Comparator,Comparable,创建一个名为“Circle”的Java类,该类实现Java.io.Serializable接口,并基于radius对圆进行建模。半径不能小于零。实现radius的getter和setter方法。还包括在circle类中重写toString。创建类的比较器,用于比较两个圆圈类型的对象。 这就是我目前所拥有的 import java.io.Serializable; public class Circle implements Serializable, Comparable<Circle
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.io.Serializable;
公共类Circle实现了可序列化、可比较的{
私有整数半径=1;
公众圈(){
}
公共圈(整数半径){
设置半径(半径);
}
公共空间设置半径(整数v){
如果(v>0){
这个半径=v;
}
}
公共int getRadius(){
返回这个.radius;
}
@凌驾
公共字符串toString(){
返回“圆{“+”半径=“+radius+'}”;
}
@凌驾
公共整数比较(圆o){
//不知道该在这里放什么
}
}
这是我的比较器类
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();
}
}
}
import java.util.Comparator;
公共类CompareCorcle实现Comparator{
比较圆(圆c1、圆c2){
}
@凌驾
公共整数比较(圆圈o1,圆圈o2){
如果(o1.getRadius()>o2.getRadius()){
返回o1.getRadius();
}否则{
返回o2.getRadius();
}
}
}
我的问题是我做得对吗?首先,您不需要实现
Comparable
或重写compareTo()
根据,这是compare()
应该返回的内容:
返回负整数、零或正整数,因为第一个参数小于、等于或大于第二个参数
您可以使用来满足这些要求:
返回:
如果x==y,则值为0;如果x首先,您不需要实现
Comparable
或重写compareTo()
根据,这是compare()
应该返回的内容:
返回负整数、零或正整数,因为第一个参数小于、等于或大于第二个参数
您可以使用来满足这些要求:
返回:
如果x==y,则值为0;如果x正如JB所指出的,如果您使用comperator,则Circle类不需要实现Compariable:
public class Circle implements Serializable /*, Comparable<Circle> */{
正如JB所指出的,如果您使用comperator,则Circle类不需要实现Compariable:
public class Circle implements Serializable /*, Comparable<Circle> */{
不,你没有。阅读Comparator的javadoc,了解它的用途,以及它的compare()方法应该返回什么。不实现Comparable是指您使用比较器来比较圆。//不知道在这里放什么-您可以编写“return Integer.comapre(this.getRadius(),o.getRadius())”不,您没有。阅读Comparator的javadoc,了解它的用途,以及它的compare()方法应该返回什么。不实现Comparable是指您使用比较器来比较圆。//不知道在这里放什么-您可以编写“return Integer.comapre(this.getRadius(),o.getRadius())”请不要使用减法来实现两个整数的比较。使用Integer.compare()。由于数值非常大的整数溢出,减法将失败。如果我想返回2或3个圆中的最大值,该怎么办?@JohnCasey Use
Collections.max()
-我已更新了答案@在这种情况下,我假设半径永远不会为负,因为它在几何上没有意义。因此,不会发生溢出。不过,这是一个很好的实践,我已经更新了代码。请不要宣传使用减法来实现两个整数的比较。使用Integer.compare()。由于数值非常大的整数溢出,减法将失败。如果我想返回2或3个圆中的最大值,该怎么办?@JohnCasey UseCollections.max()
-我已更新了答案@在这种情况下,我假设半径永远不会为负,因为它在几何上没有意义。因此,不会发生溢出。然而,这是一个很好的实践,我已经更新了代码。
public class Circle implements Serializable /*, Comparable<Circle> */{
@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();
}
}