001    /**
002     * This class represents a Rectangle.
003     *
004     * <p>There are two new fields:
005     * <br><code>private double height</code>
006     * <br><code>private double width</code>
007     *
008     * @version     3.0, March 2003
009     * @author    Shayne Steele  steele@cs.fsu.edu
010     */
011    public class Rectangle
012    {
013        /**
014         * define constant for shortest height
015         */
016        public static final double SHORTEST_HEIGHT = 0.0;
017    
018        /**
019         * define constant for shortest width
020         */
021        public static final double SHORTEST_WIDTH = 0.0;
022    
023        /**
024         * define constant for default height
025         */
026        public static final double DEFAULT_HEIGHT = 0.0;
027    
028        /**
029         * define constant for default width
030         */
031        public static final double DEFAULT_WIDTH = 0.0;
032    
033        /**
034         * height
035         */
036        private double height;
037    
038        /**
039         * width
040         */
041        private double width;
042    
043        /**
044         * Set this object's height value.
045         * @param height set this object height value to the parameter, 
046         * with a minimum size of <code>SHORTEST_HEIGHT</code>
047         */
048        private void privateSetHeight(double height)
049        {
050            this.height = (height < SHORTEST_HEIGHT) ? SHORTEST_HEIGHT : height;
051        }
052    
053        /**
054         * Set this object's width value.
055         * @param width set this object width value to the parameter,
056         * with a minimum size of <code>SHORTEST_WIDTH</code>
057         */
058        private void privateSetWidth(double width)
059        {
060            this.width = (width < SHORTEST_WIDTH) ? SHORTEST_WIDTH : width;
061        }
062    
063        /**
064         * Complete constructor.
065         * @param height the height
066         * @param width the width
067         */
068        public Rectangle(double height, double width)
069        {
070            privateSetHeight(height);
071            privateSetWidth(width);
072        }
073    
074        /** 
075         * Empty constructor.
076         * <p> <code>height</code> and <code>width</code> set to 
077         * <code>DEFAULT_HEIGHT</code> and <code>DEFAULT_WIDTH</code> respectivly 
078         */
079        public Rectangle()
080        {
081            this(DEFAULT_HEIGHT, DEFAULT_WIDTH);
082        }
083    
084        /** 
085         * Copy constructor.
086         * @param rectangle this object will have <code>height</code> and 
087         * <code>width</code> set to parameter's values
088         */
089         public Rectangle(Rectangle rectangle)
090        {
091            this(rectangle.height, rectangle.width);
092        }
093    
094        /**
095         * This object height value.
096         * @return this object height value
097         */
098        public double getHeight()
099        {
100            return (height);
101        }
102    
103        /**
104         * This object width value.
105         * @return this object width value
106         */
107        public double getWidth()
108        {
109            return (width);
110        }
111    
112        /**
113         * Set this object height value.
114         * @param height set this object height value to the parameter
115         */
116        public void setHeight(double height)
117        {
118            privateSetHeight(height);
119        }
120    
121        /**
122         * Set this object width value.
123         * @param width set this object width value to the parameter
124         */
125        public void setWidth(double width)
126        {
127            privateSetHeight(height);
128        }
129     
130        /**
131         * Complete set.
132         * @param height height
133         * @param width width
134         */
135         public void setRectangle(double height, double width)
136        {
137            setHeight(height);
138            setWidth(width);
139        }
140    
141        /**
142         * Empty set.
143         * <p> <code>height</code> and <code>width</code> set to 
144         * <code>DEFAULT_HEIGHT</code> and <code>DEFAULT_WIDTH</code> respectivly 
145         */
146        public void setRectangle()
147        {
148            setRectangle(DEFAULT_HEIGHT, DEFAULT_WIDTH);
149        }
150    
151        /**
152         * Copy set.
153         * @param rectangle this object will have <code>height</code> and 
154         * <code>width</code> set to parameter's values
155         */
156        public void setRectangle(Rectangle rectangle)
157        {
158            setRectangle(rectangle.height, rectangle.width);
159        }
160    
161        /**
162         * The area of this object.
163         * @return the area of this object
164         */
165        public double area()
166        {
167            return (height * width);
168        }
169    
170        /**
171         * The perimeter of this object.
172         * @return the perimeter of this object
173         */
174        public double perimeter()
175        {
176            return (2.0 * (height + width));
177        }
178    
179        /**
180         * A String representation of this object. 
181         * @return Rectangle[height = value, width = value]
182         */
183         public String toString()
184        {
185            return("Rectangle[height = " + height + ", width = " + width + "]");
186        }
187    }
188    
189