代码之家  ›  专栏  ›  技术社区  ›  John Casey

比较两个圆形物体

  •  1
  • John Casey  · 技术社区  · 8 年前

    这就是我目前所拥有的

    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 回复  |  直到 8 年前
        1
  •  1
  •   bgfvdu3w    8 年前

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

    根据 documentation ,这是什么 compare()

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

    您可以使用 Integer.compare()

    返回:

    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());
        }
    }
    

    输出:

    7.

        2
  •  -1
  •   c0der    8 年前

    Circle 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();
        }   
    }
    
    推荐文章