001/** 002 * This is part of HW0: Environment Setup and Java Introduction for CSE 331. 003 */ 004package hw0; 005 006import java.lang.Iterable; 007import java.util.Set; 008import java.util.LinkedHashSet; 009import java.util.Iterator; 010import java.util.Collections; 011 012/** 013 * This is a container can be used to contain Balls. 014 * A given Ball may only appear in a BallContainer once. 015 */ 016public class BallContainer implements Iterable<Ball> { 017 018 // Contents of the BallContainer. 019 private Set<Ball> contents; 020 021 /** 022 * Constructor that creates a new ballcontainer. 023 */ 024 public BallContainer() { 025 contents = new LinkedHashSet<Ball>(); 026 } 027 028 /** 029 * Implements the Iterable interface for this container. 030 * @return an Iterator over the Ball objects contained 031 * in this container. 032 */ 033 public Iterator<Ball> iterator() { 034 // If we just returned the iterator of "contents", a client 035 // could call the remove() method on the iterator and modify 036 // it behind our backs. Instead, we wrap contents in an 037 // "unmodifiable set"; calling remove() on this iterator 038 // throws an exception. This is an example of avoiding 039 // "representation exposure." You will learn more about this 040 // concept later in the course. 041 return Collections.unmodifiableSet(contents).iterator(); 042 } 043 044 /** 045 * Adds a ball to the container. This method returns <tt>true</tt> 046 * if ball was successfully added to the container, i.e. ball is 047 * not already in the container. Of course, you are allowed to put 048 * a Ball into a container only once. Hence, this method returns 049 * <tt>false</tt>, if ball is already in the container. 050 * @param b Ball to be added. 051 * @return true if ball was successfully added to the container, 052 * i.e. ball is not already in the container. Returns false, if ball is 053 * already in the container. 054 */ 055 public boolean add(Ball b) { 056 // Your code goes here. Remove the exception after you're done. 057 throw new RuntimeException("Method not implemented"); 058 } 059 060 /** 061 * Removes a ball from the container. This method returns 062 * <tt>true</tt> if ball was successfully removed from the 063 * container, i.e. ball is actually in the container. You cannot 064 * remove a Ball if it is not already in the container and so ths 065 * method will return <tt>false</tt>, otherwise. 066 * @param b Ball to be removed. 067 * @return true if ball was successfully removed from the container, 068 * i.e. ball is actually in the container. Returns false, if ball is not 069 * in the container. 070 */ 071 public boolean remove(Ball b) { 072 // Your code goes here. Remove the exception after you're done. 073 throw new RuntimeException("Method not implemented"); 074 } 075 076 /** 077 * Each Ball has a volume. This method returns the total volume of 078 * all the Balls in the container. 079 * @return the volume of the contents of the container. 080 */ 081 public double getVolume() { 082 // Your code goes here. Remove the exception after you're done. 083 throw new RuntimeException("Method not implemented"); 084 } 085 086 /** 087 * Returns the number of Balls in this container. 088 * @return the number of Balls in this container. 089 */ 090 public int size() { 091 // Your code goes here. Remove the exception after you're done. 092 throw new RuntimeException("Method not implemented"); 093 } 094 095 /** 096 * Empties the container, i.e. removes all its contents. 097 */ 098 public void clear() { 099 // Your code goes here. Remove the exception after you're done. 100 throw new RuntimeException("Method not implemented"); 101 } 102 103 /** 104 * This method returns <tt>true</tt> if this container contains 105 * the specified Ball. It will return <tt>false</tt> otherwise. 106 * @param b Ball to be checked if its in container 107 * @return true if this container contains the specified Ball. Returns 108 * false, otherwise. 109 */ 110 public boolean contains(Ball b) { 111 // Your code goes here. Remove the exception after you're done. 112 throw new RuntimeException("Method not implemented"); 113 } 114 115}