/**
This class computes the average of a set of data values.
*/
public class DataSet
{
/**
Constructs an empty data set.
*/
public DataSet()
{
final int DATA_LENGTH = 100;
data = new double[DATA_LENGTH];
dataSize = 0;
}
/**
Adds a data value to the data set
@param x a data value
*/
public void add(double x)
{
if (dataSize >= data.length)
{
// make a new array of twice the size
double[] newData = new double[2 * data.length];
// copy over all elements from data to newData
System.arraycopy(data, 0, newData, 0, data.length);
// abandon the old array and store in data
// a reference to the new array
data = newData;
}
data[dataSize] = x;
dataSize++;
}
/**
Gets the average of the added data.
@return the average or 0 if no data has been added
*/
public double getAverage()
{
if (dataSize == 0) return 0;
double sum = 0;
for (int i = 0; i < dataSize; i++)
sum = sum + data[i];
return sum / dataSize;
}
private double[] data;
private int dataSize;
}
import java.util.Random;
/**
This program tests the DataSet class by adding 10,000 numbers
to the data set and computing the average.
*/
public class DataSetTest
{
public static void main(String[] args)
{
Random generator = new Random();
DataSet data = new DataSet();
final int COUNT = 10000;
System.out.println("Adding " + COUNT + " random numbers.");
for (int i = 0; i < COUNT; i++)
{
double x = generator.nextDouble();
data.add(x);
}
double average = data.getAverage();
System.out.println("average=" + average);
}
}
/**
A coin with a monetary value.
*/
public class Coin
{
/**
Constructs a coin.
@param aValue the monetary value of the coin.
@param aName the name of the coin
*/
public Coin(double aValue, String aName)
{
value = aValue;
name = aName;
}
/**
Gets the coin value.
@return the value
*/
public double getValue()
{
return value;
}
/**
Gets the coin name.
@return the name
*/
public String getName()
{
return name;
}
public boolean equals(Object otherObject)
{
Coin other = (Coin)otherObject;
return name.equals(other.name)
&& value == other.value;
}
private double value;
private String name;
}
import java.util.ArrayList;
/**
A purse holds a collection of coins.
*/
public class Purse
{
/**
Constructs an empty purse.
*/
public Purse()
{
coins = new ArrayList();
}
/**
Add a coin to the purse.
@param aCoin the coin to add
*/
public void add(Coin aCoin)
{
coins.add(aCoin);
}
/**
Get the total value of the coins in the purse.
@return the sum of all coin values
*/
public double getTotal()
{
double total = 0;
for (int i = 0; i < coins.size(); i++)
{
Coin aCoin = (Coin)coins.get(i);
total = total + aCoin.getValue();
}
return total;
}
private ArrayList coins;
}
import javax.swing.JOptionPane;
/**
This class tests the Purse class by prompting the
user to add coins into a purse and computing the total
value of the purse.
*/
public class PurseTest
{
public static void main(String[] args)
{
double NICKEL_VALUE = 0.05;
double DIME_VALUE = 0.1;
double QUARTER_VALUE = 0.25;
Purse myPurse = new Purse();
boolean done = false;
while (!done)
{
String input
= JOptionPane.showInputDialog("Enter coin name or Cancel");
if (input == null)
done = true;
else
{
double value = 0;
if (input.equals("nickel"))
value = NICKEL_VALUE;
else if (input.equals("dime"))
value = DIME_VALUE;
else if (input.equals("quarter"))
value = QUARTER_VALUE;
if (value != 0)
{
Coin c = new Coin(value, input);
myPurse.add(c);
double totalValue = myPurse.getTotal();
System.out.println("The total is " + totalValue);
}
}
}
System.exit(0);
}
}