Fall 2013 CSCI 202 Homework 6

This assignment must be completed by 10:10 AM on Friday, 5 October, and uploaded to the Homework 6 moodle page. You should upload only your RotatedRectangle.java file along with the java class used to test it. All your classes should be in in the edu.unca.cs.csci202 package and have a proper @author annotation.

Why?

This is the first of a series of assignments to look at classes, inheritence, and interfaces. In this one we look at the “standard” expectations for classes.

Getting starting

First take a look at a Javadoc-created description of a RotatedRectangle class. You’ll need to click RotatedRectangle to see anything interesting.

The task

Subtask Zero

Create a project with a class RotatedRectangle using the starter code given below. Be sure to add yourself as one of the authors.

package edu.unca.cs.csci202;

/**
 *
 * @author J Dean Brock <brock@unca.edu>
 * @author Your Name Here <youremail@unca.edu>
 */
public class RotatedRectangle {
    private int x ;
    private int y ;
    private int height ;
    private int width ;
    private double rotation ;
    
    /**
     *
     * @return  X coordinate of the center of the rectangle
     */
    public int getX() {
        return x ;
    }

    /**
     *
     * @param x  New X coordinate for the center of the rectangle
     */
    public void setX(int x) {
        this.x = x ;
    }
    
        /**
     *
     * @return  Y coordinate of the center of the rectangle
     */
    public int getY() {
        return y ;
    }

    /**
     *
     * @param y  New Y coordinate for the center of the rectangle
     */
    public void setY(int y) {
        this.y = y ;
    }
    
    
    /**
     *
     * @return  Height of the rectangle (when rotation is 0)
     */
    public int getHeight() {
        return height ;
    }

    /**
     *
     * @param height  New height for the rectangle
     */
    public void setHeight(int height) {
        this.height = height ;
    }

    /**
     *
     * @return  Width of the rectangle (when rotation is 0)
     */
    public int getWidth() {
        return width ;
    }

    /**
     *
     * @param width  New width for the rectangle
     */
    public void setWidth(int width) {
        this.width = width ;
    }

    /**
     *
     * @return  Rotation for the rectangle
     */
    public double getRotation() {
        return rotation ;
    }
            
    /**
     *
     * @param rotation  New rotation for the rectangle
     */
    public void setRotation(double rotation) {
        this.rotation = rotation ;
    }
    
}

Subtask One

It really makes no sense to have a rectangle with negative height or width, so modify RotatedRectangle so that the setHeight and setWidth throw IllegalArgumentException when they are called with a negative argument.

Be sure that your program creates an IllegalArgumentException with a useful message.

Subtask Two

Presently, the RotatedRectangle has only one constructor, the no-argument default constructor.

Add the following four constructors to RotatedRectangle.

By the way, your life will be easier if you start by defining the first one and then call the this constructor for the other three. When appropriate your constructors should throw IllegalArgumentException.

Subtask Three

Many people will prefer to give the rotation in degrees rather than radians. Add a second setRotation method that receives a single int argument representing an angle in degrees. This argument is then converted into radians using the formula (Π/180.0)*degrees.

At this point you should have RotatedRectangle class that follows this augmented description of a RotatedRectangle class.

Subtask Four

Either generate a JUnit test class for your RotatedRectangle class or write a main class called DriverHW6 that tests several methods of RotatedRectangle.

It would be tedious to test all the methods and constructors, but test at last one constructor and three methods.