Outbound Parameters
A Programming Pattern in Java |
Prof. David Bernstein |
Computer Science Department |
bernstdh@jmu.edu |
Range
class that has two attributes
and return an instance of it
/** * An encapsulation of a range of doubles. * * @author Prof. David Bernstein, James Madison University * @version 1.0 */ public class Range { private double max, min; /** * Construct the Range (-infinity, infinity). */ public Range() { set(Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY); } /** * Construct a Range. * * @param min The minimum value in the Range * @param max The maximum value in the Range */ public Range(double min, double max) { set(min, max); } /** * Get the maximum value in this Range. * * @return The maximum value */ public double getMax() { return max; } /** * Get the minimum value in this Range. * * @return The minimum value */ public double getMin() { return min; } /** * Set this Range. Note that, if the min and max are reversed, * this method will swap the two. * * @param min The minimum value * @param max The maximum value */ public void set(double min, double max) { this.min = min; this.max = max; } }
import java.awt.Color; /** * A mutable wrapper for Color objects. * * @author Prof. David Bernstein, James Madison University * @version 1.0 */ public class ColorWrapper { private Color wrapped; /** * Default Constructor. */ public ColorWrapper() { set(null); } /** * Explicit Value Constructor. * * @param c The initial Color */ public ColorWrapper(Color c) { set(c); } /** * Get the wrapped Color. * * @return The value */ public Color get() { return wrapped; } /** * Set the wrapped Color. * * @param c The value */ public void set(Color c) { wrapped = c; } }
null
and, if it is, construct an
instance of the outbound parameter
/** * Calculate minimum and maximum values in an array. * * @param data The data * @param range An outbound parameter containing the min and max (or null) * @return The range */ public static double[] extremes(double[] data, double[] range) { if (range == null) range = new double[2]; range[0] = Double.POSITIVE_INFINITY; range[1] = Double.NEGATIVE_INFINITY; for (int i = 0; i < data.length; i++) { if (data[i] < range[0]) range[0] = data[i]; if (data[i] > range[1]) range[1] = data[i]; } return range; }
/** * Calculate minimum and maximum values in an array. * * @param data The data * @param range An outbound parameter containing the min and max (or null) * @return The range */ public static Range extrema(double[] data, Range range) { if (range == null) range = new Range(); double max, min; min = Double.POSITIVE_INFINITY; max = Double.NEGATIVE_INFINITY; for (int i = 0; i < data.length; i++) { if (data[i] < min) min = data[i]; if (data[i] > max) max = data[i]; } range.set(min, max); return range; }
/** * Sumamrize the properties of an array. * * @param data The data array * @param positives An outbound parameter for the count of positive elements * @param negatives An outbound parameter for the count of negative elements * @param zeroes An outbound parameter for the count fo zero elements */ public static void summarize(int[] data, IntWrapper positives, IntWrapper negatives, IntWrapper zeroes) { int neg = 0, pos = 0, zer = 0; for (int i = 0; i < data.length; i++) { if (data[i] < 0) neg++; else if (data[i] > 0) pos++; else zer++; } positives.set(pos); negatives.set(neg); zeroes.set(zer); }
/** * A method that converts any Color to JMU purple and. * * @param wrapper The outbound wrapped Color * @return The outbound wrapped Color */ public static ColorWrapper purpleOut(ColorWrapper wrapper) { if (wrapper == null) wrapper = new ColorWrapper(); wrapper.set(new Color(69, 0, 132)); return wrapper; }