Repetition Patterns -- Practice
public class Coin // class has no modifier methods (is "immutable")
{
public Coin(double aValue, String aName) { . . . }
public double getValue() { . . . }
. . .
}
public class CoinCollection
{
private ArrayList<Coin> aList; // internal representation is an ArrayList
/** Constructs an empty coin collection. **/
public CoinCollection()
{
// Code to construct empty collection is missing!
this.aList = new ArrayList<Coin>();
}
/** Adds a coin to the collection. **/
void add(Coin coin)
{
// Code to add a coin to the collection is missing!
this.aList.add(coin);
}
/** Sums the values in the collection. **/
public double sum()
{
// Code to calculate the sum of the coin values in aList is missing!
double sum = 0;
for ( Coin c : aList )
{
sum += c.getValue();
}
}
/** Determines whether a given value is in the array.
* @return true if val is in the array; false otherwise
**/
public boolean contains(double coinValue)
{
// Code to determine whether there is a coin with the
// specified value in the collection.
for ( Coin c : aList )
{
if ( c.getValue() == coinValue )
return true;
}
return false;
// Do NOT return false from an else inside the for loop,
// otherwise you will return true or false just based on whether
// the FIRST item in the list is of the correct value.
// Alternative loop:
for ( int i = 0; i < aList.size(); i++ )
{
Coin c = aList.get(i);
if ( c.getValue() == coinValue )
return true;
}
return false;
}
/** Finds the maximum coin value in the array.
**/
public double maxValue()
{
// Code to find maximum value in the collection is missing!
if ( aList.isEmpty() )
return -1; // docs should have said what to do here
double maxSoFar = aList.get(0).getValue();
for ( Coin c : aList )
{
if ( c.getValue() > maxSoFar )
maxSoFar = c.getValue();
}
return maxSoFar;
}
/** Counts the number of coins in the collection with the given
* value. **/
public int count(double aValue)
{
// Code to count the number of coins in the collection that have
// the given value of aValue in aList
int theCount = 0;
for ( Coin c : aList )
{
if ( c.getValue() == aValue )
theCount++;
}
return theCount;
}
}