|
Compound Numbers
A Programming Pattern |
|
Prof. David Bernstein |
| Computer Science Department |
| bernstdh@jmu.edu |
int for pounds and an int for ounces)
ounces = ounces + 2;
ounces = ounces + deltaounces;
pounds = pounds + (ounces + deltaounces) / 16;
ounces = (ounces + deltaounces) % 16;
ounces = (ounces + deltaounces) % 16;
pounds = pounds + (ounces + deltaounces) / 16;
pounds = (pounds + deltapounds) + (ounces + deltaounces) / 16;
ounces = (ounces + deltaounces) % 16;
tons = (tons + deltatons) + (pounds + deltapounds + (ounces + deltaounces) / 16) / 2000;
pounds = (pounds + deltapounds) + (ounces + deltaounces) / 16;
ounces = (ounces + deltaounces) % 16;
equals(),
compareTo())Weight class that has only one attribute
measured in ounces,
but accessors that can return tons, pounds and ounces and
mutators that can be passed tons, pounds, and ouncesimport java.util.*;
/**
* A weight class that uses the compound number programming pattern.
*
* Note: This class also uses: information hiding, static attributes,
* overloaded methods, and overloaded constructors.
*
* @author Prof. David Bernstein, James Madison University
*/
public class Weight
{
private static final int OUNCES_PER_POUND = 16;
private static final int POUNDS_PER_TON = 2000;
private static final int OUNCES_PER_TON = OUNCES_PER_POUND*POUNDS_PER_TON;
private int value;
/**
* Construct a Weight of 0.
*/
public Weight()
{
value = 0;
}
/**
* Construct a Weight.
* Note: The signs of the parameters do not have to agree.
*
* @param tons The number of tons
* @param pounds The number of pounds
* @param ounces The number of ounces
*/
public Weight(int tons, int pounds, int ounces)
{
value = 0;
changeBy(tons, pounds, ounces);
}
/**
* Change this Weight by a given amount.
* Note: The signs of the parameters do not have to agree.
*
* @param tons The number of tons
* @param pounds The number of pounds
* @param ounces The number of ounces
*/
public void changeBy(int tons, int pounds, int ounces)
{
value += tons * OUNCES_PER_TON + pounds * OUNCES_PER_POUND + ounces;
}
/**
* Change this Weight by a given amount.
*
* @param other The Weight to change by
*/
public void changeBy(Weight other)
{
value += other.value;
}
/**
* Check to see if this Weight is equal to
* a given Weight.
*
* @param other The other Weight to use in the comparison
* @return true if the two are equal and false otherwise
*/
public boolean equals(Weight other)
{
return this.value == other.value;
}
/**
* Multiply this Weight by a scalar.
* Note: This method truncates the ounces if necessary.
*
* @param m The scalar multiple
*/
public void multiplyBy(double m)
{
value = (int)(value * m);
}
/**
* Get a String representation of this Weight.
*
* @return The String
*/
public String toString()
{
int ounces, pounds, tons, unsigned;
String s;
unsigned = Math.abs(value);
tons = (unsigned / OUNCES_PER_TON);
pounds = (unsigned % OUNCES_PER_TON) / OUNCES_PER_POUND;
ounces = (unsigned % OUNCES_PER_TON) % OUNCES_PER_POUND;
s = new String();
if (value < 0) s += "Negative";
if (tons > 1) s += " " + tons + "tons";
else if (tons > 0) s += " " + tons + "ton";
if (pounds > 1) s += " " + pounds + "pounds";
else if (pounds > 0) s += " " + pounds + "pound";
if (ounces > 1) s += " " + ounces + "ounces";
else s += " " + ounces + "ounce";
return s;
}
}