001    /**
002     * This is part of HW2: Environment Setup and Java Introduction for CSE 331.
003     */
004    package hw2;
005    
006    import java.lang.Iterable;
007    import java.util.Iterator;
008    
009    /**
010     * This is a container can be used to contain Balls. The key
011     * difference between a BallContainer and a Box is that a Box has a
012     * finite volume. Once a box is full, a client cannot put in more Balls.
013     */
014    public class Box implements Iterable<Ball> {
015    
016        /**
017         * ballContainer is used to internally store balls for this Box
018         */
019        private BallContainer ballContainer = new BallContainer();
020    
021        /**
022         * Constructor that creates a new box.
023         * @param maxVolume Total volume of balls that this box can contain.
024         */
025        public Box(double maxVolume) {
026            // Your code goes here.  Remove the exception after you're done.
027            throw new RuntimeException("Method not implemented");
028        }
029    
030        /**
031         * Implements the Iterable interface for this box.
032         * @return an Iterator over the Ball objects contained
033         * in this box.
034         */
035        public Iterator<Ball> iterator() {
036            return ballContainer.iterator();
037        }
038    
039    
040        /**
041         * This method is used to add Ball objects to this box of
042         * finite volume.  The method returns true if a ball is
043         * successfully added to the box, i.e., ball is not already in the
044         * box and if the box is not already full; and it returns false,
045         * if ball is already in the box or if the box is too full to
046         * contain the new ball.
047         * @param b Ball to be added.
048         * @return true if ball was successfully added to the box,
049         * i.e. ball is not already in the box and if the box is not
050         * already full. Returns false, if ball is already in the box or
051         * if the box is too full to contain the new ball.
052         */
053        public boolean add(Ball b) {
054            // Your code goes here.  Remove the exception after you're done.
055            throw new RuntimeException("Method not implemented");
056        }
057    
058        /**
059         * This method returns an iterator that returns all the balls in
060         * this box in ascending size, i.e., return the smallest Ball
061         * first, followed by Balls of increasing size.
062         * @return an iterator that returns all the balls in this box in
063         * ascending size.
064         */
065        public Iterator<Ball> getBallsFromSmallest() {
066            // Your code goes here.  Remove the exception after you're done.
067            throw new RuntimeException("Method not implemented");
068        }
069    
070        /**
071         * Removes a ball from the box. This method returns
072         * <tt>true</tt> if ball was successfully removed from the
073         * container, i.e. ball is actually in the box. You cannot
074         * remove a Ball if it is not already in the box and so ths
075         * method will return <tt>false</tt>, otherwise.
076         * @param b Ball to be removed.
077         * @return true if ball was successfully removed from the box,
078         * i.e. ball is actually in the box. Returns false, if ball is not
079         * in the box.
080         */
081        public boolean remove(Ball b) {
082            return ballContainer.remove(b);
083        }
084    
085        /**
086         * Each Ball has a volume. This method returns the total volume of
087         * all the Balls in the box.
088         * @return the volume of the contents of the box.
089         */
090        public double getVolume() {
091           return ballContainer.getVolume();
092        }
093    
094        /**
095         * Returns the number of Balls in this box.
096         * @return the number of Balls in this box.
097         */
098        public int size() {
099            return ballContainer.size();
100        }
101    
102        /**
103         * Empties the box, i.e. removes all its contents.
104         */
105        public void clear() {
106            ballContainer.clear();
107        }
108    
109        /**
110         * This method returns <tt>true</tt> if this box contains
111         * the specified Ball. It will return <tt>false</tt> otherwise.
112         * @param b Ball to be checked if its in box
113         * @return true if this box contains the specified Ball. Returns
114         * false, otherwise.
115         */
116        public boolean contains(Ball b) {
117            return ballContainer.contains(b);
118        }
119    
120    }