        // Simple definition of a SimpleShip class with position,
        // speed and course information.
public class SimpleShip {
    // Default position, course and speed.
    public static final double DEFAULT_X = 25.0, DEFAULT_Y = 25.0;
    public static final double DEFAULT_COURSE = 0.0, DEFAULT_SPEED = 5.0;

        // Constructors.
    public SimpleShip(double x, double y, double course, double speed){
        setPosition(x,y);
        setCourse(course);
        setSpeed(speed);
    }

    public SimpleShip(double x, double y, double course){
        this(x,y,course,DEFAULT_SPEED);
    }

    public SimpleShip(double x, double y){
        this(x,y,DEFAULT_COURSE,DEFAULT_SPEED);
    }

    public SimpleShip(){
        // Set default position, course and speed for this ship.
        this(DEFAULT_X,DEFAULT_Y,DEFAULT_COURSE,DEFAULT_SPEED);
    }

    public SimpleShip(String name){
        this();
        setName(name);
    }

        // Public mutators.
    public void setPosition(double x, double y){
        setX(x);
        setY(y);
    }

    public void setSpeed(double newSpeed){
        speed = newSpeed;
    }

    public void setCourse(double newCourse){
        // Keep degrees in the range [0..360)
        final double numDegrees = 360.0;
        if(newCourse < 0){
            newCourse = numDegrees+(newCourse%numDegrees);
        }
        course = newCourse % numDegrees;
    }

        // Other public methods.
    public void report(){
        String name = getName();
        if((name != null) && !name.equals("")){
            System.out.print(name+": ");
        }
        System.out.print("Position is ("+getX()+","+getY()+"), ");
        System.out.print("Course is "+getCourse()+", ");
        System.out.print("Speed is "+getSpeed());
        System.out.println();
    }

    public void move(){
        double radians = Math.toRadians(getCourse());
        setPosition(getX()+speed*Math.cos(radians),
                    getY()+speed*Math.sin(radians));
    }

        // Accessors to the basic attributes.
    public double getX(){
        return x;
    }

    public double getY(){
        return y;
    }

    public double getCourse(){
        return course;
    }

    public double getSpeed(){
        return speed;
    }

    public String getName(){
        return name;
    }

        // Private mutators.
    private void setX(double xval){
        x  = xval;
    }

    private void setY(double yval){
        y  = yval;
    }

    private void setName(String s){
        if(s != null){
            name = s;
        }
    }

    /* Private data. */
    // (x,y) co-ordinates in the ocean.
    private double x = DEFAULT_X, y = DEFAULT_Y;
    // Speed and course.
    private double speed = DEFAULT_SPEED, course = DEFAULT_COURSE;
    // A name for the ship.
    private String name = "";
}
