/* Nadeem Abdul Hamid - CSC 120A - Fall 2004 - Lecture Unit 5 */

public class Circle {
    // publically accessible class constants
    public static final double PI = 3.14159;
    
    // private data of the implementation
    private double radius;
    
    // Constructor: inputs a radius value from the keyboard
    public Circle() {
        radius = Keyboard.readDouble();
        if (radius < 0.0) radius = 0.0;
    }        
    
    // Constructor: takes a radius value as a parameter
    public Circle(double new_r) { 
        if (new_r >= 0.0) radius = new_r; 
        else radius = 0.0;
    }
    
    // "accessor" methods 
    public double getRadius() { return radius; }
    public double getDiameter() { return radius * 2; }
    public double getArea() { return PI * radius * radius; }
    public double getCircumf() { return 2 * PI * radius; }
    
    // "update" methods
    public void setRadius(double new_r) { 
        if (new_r >= 0.0) radius = new_r; 
    }
    
    public void setDiameter(double new_d) {
        if (new_d >= 0.0) radius = new_d / 2.0;
    }

    public void scale(double factor) {
        setRadius(getRadius() * factor);
    }
    
    // utility method to print out the data associated with
    // this circle
    public void printCircleData() {
        System.out.println("Radius: " + getRadius());
        System.out.println("Diameter: " + getDiameter());
        System.out.println("Area: " + getArea());
        System.out.println("Circumference: " + getCircumf());
    }
    
    // method to compare two circle objects
    public boolean equals(Circle other) {
        // floating point comparison ... up to a round-off error margin
        return (getRadius() - other.getRadius() < 0.00000001);
    }
    
}