当前位置: 首页 > 知识库问答 >
问题:

比较两个圆形对象

应涵容
2023-03-14

创建一个名为“Circle”的Java类来实现Java。io。可串行化接口,并基于半径对圆进行建模。半径不能小于零。实现radius的getter和setter方法。还包括在circle类中重写toString。创建类的比较器,用于比较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.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();
    }

}
}

我的问题是我做得对还是不对?

共有2个答案

寿和通
2023-03-14

正如JB所指出的Circle类不需要实现可比,如果您使用comperator:

public class Circle implements Serializable /*, Comparable<Circle> */{

在CompareCircle中,可以删除构造函数(实际使用默认构造函数)
比较方法还应处理两个相等圆的情况:

@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();
    }   
}
富昕
2023-03-14

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

根据留档,这是比较()应该返回的内容:

当第一个参数小于、等于或大于第二个参数时,返回一个负整数、零或正整数。

您可以使用Integer.compare()来满足以下要求:

返回:值0如果x==y;如果x小于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的实例。您可以将其用于集合。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());
    }
}

输出:

7.

 类似资料:
  • 在爪哇中。如果我们必须将一个对象与另一个对象进行比较。我们比较该对象中的每个字段。 学生 1 对象具有标记 1、标记 2、标记 3、名称、年龄作为字段。学生 2 对象具有标记 1、标记 2、标记 3、名称、年龄作为字段。因此,要检查2名学生是否相等...我们比较每个字段。 但是,如果 Student 对象有许多字段,该怎么办?学生1对象有标记1,标记2,标记3,名称,年龄,地址,颜色,类,国家,部

  • 对于PostgreSQL(v9.5),JSONB格式提供了极好的机会。但现在我只能做一个相对简单的手术; 比较两个jsonb对象;查看一个文档与另一个文档相比有什么不同或缺失。 到目前为止我所拥有的 应该返回第1行与第2行的差异: 相反,它还返回重复项(

  • 使用RestAssured,我试图比较两个JSON对象。 示例:第一个JSON来自excel,我将其作为字符串读取并存储 第二个 JSON 是返回响应对象的响应,该响应对象实际上是一个 JSON 我想将这两者作为JSON对象进行比较,因为当我将响应转换为String并尝试进行比较时,如果JSON模式的顺序发生变化,我的断言就会失败。 我尝试了将字符串转换成JSON的方法,但是没有找到任何方法。有人

  • 问题内容: 我有两个从同一类实例化的java对象。 如果我将它们的两个属性都设置为完全相同的值,然后验证它们是否相同 但是,这些方法都不返回真实值。我已经检查了每个属性,并且它们匹配。 如何比较这两个对象以验证它们是否相同? 问题答案: 你需要提供自己的实现。 如果哈希表中有可能使用你的对象,则还应该重写。一个合理的实施将是该对象的字段的哈希码喜欢的东西结合起来:

  • 我怎么能那么做?

  • 第一次来这里,所以我希望这是有意义的! 我有两个对象数组,比如l1和l2,我想在这两个列表之间进行比较,并在l3中得到一个不匹配的值。用户类包含2个字符串: 比如,l1包含:Java、JSF、JAXR、foo l2包含:JSF、JAXR 我可以对匹配的值进行比较,但不能对不匹配的值进行比较。这种逻辑似乎有缺陷。有什么帮助吗? 对于匹配值: 但是,对于不匹配,当我说不等于时,我得到的不是唯一的值,而