Search code examples
javacomparecomparatorcomparable

Comparing two object of type circle


Create a Java class named “Circle” that implements java.io.Serializable interface and models a circle based on radius. Radius cannot be less than zero. Implement the getter and setter method for radius. Also include an overriding of toString in the circle class. Create the class' comparator which compares two objects of type Circle.

This is what I have so far

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

}



}

This my comparator class

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

}
}

My question is did I do this right or no?


Solution

  • As JB pointed out Circle class does not need to implement Comparable if you use comperator:

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

    In CompareCircle you can drop the constructor (actually use the default constructor CompareCircle() ).
    The compare method should also handle the case of two equal circles:

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