Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 两种圆型物体的比较_Java_Compare_Comparator_Comparable - Fatal编程技术网

Java 两种圆型物体的比较

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

创建一个名为“Circle”的Java类,该类实现Java.io.Serializable接口,并基于radius对圆进行建模。半径不能小于零。实现radius的getter和setter方法。还包括在circle类中重写toString。创建类的比较器,用于比较两个圆圈类型的对象。

这就是我目前所拥有的

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;如果xy,则值大于0

输出:

七,


首先,您不需要实现
Comparable
或重写
compareTo()

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

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

您可以使用来满足这些要求:

返回: 如果x==y,则值为0;如果xy,则值大于0

输出:

七,


正如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 Use
Collections.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();
    }   
}