Purpose:
A Categorizer
object determines which of a collection
of intervals a
particular value belongs to. In other words, a Categorizer
object can be used
to determine the "category" of a value.
Categorizer
objects are immutable.
Categorizer
objects can be used in a variety of
different applications. For example, when used as part of a system
for calculating the Air Quality Index (AQI) for carbon monoxide
(CO), a Categorizer
object could be used to
determine that a value of 8.4
is "Moderate" with an AQI of 89.
A Categorizer
object uses an array of
Category
objects to do the actual work (one
Category
object for each interval).
Continuing with the AQI example, a Categorizer
for CO
would use an array of six Category
objects for the
intervals \([0.0,4.5), [4.5,9.5), [9.5,12.5), [12.5,15.5), [15.5, 30.5),
[30.5,\infty)\) and the descriptions "Good", "Moderate",
"Unhealthy for Sensitive Groups", "Unhealthy", "Very Unhealthy",
and "Hazardous". Given a value of 8.4 for CO, it would identify
(using the includesValue()
method in the
Category
class)
the Category
that contains this value (i.e., the
Category
for the interval \([4.5,9.5)\)),
and use that Category
object to
determine that the AQI is 89 (using its indexOf()
method)
and the description is "Moderate" (using its
getDescription()
method).
name
- A String
containing
the name of this Categorizer
(e.g., "CO")categories
- A Category[]
containing
the Category
objects that actually do the work.
It may contain other private attributes as well.
/** * Explicit Value Constructor. * * @param name The name of this Categorizer (e.g., "CO") * @param descriptions The descriptions of the categories * @param indexes The indexes that define the intervals * @param values The values that define the corresponding intervals */ public Categorizer(String name, String[] descriptions, int[] indexes, double[] values) { }
At a minimum, this method must construct the array of
Category
objects that the Categorizer
uses.
/** * Calculate the index for a particular value. * * In other words, determine which interval contains the value and * calculate the corresponding index (using linear * interpolation). If the value is not found, this method returns * the largest index * * @param value The value of interest * @return The corresponding index */ public int indexOf(double value) { }
/** * Get the description associated with a particular index (or "N/A" * if the index is not in any of the intervals). * * @param index The index of interest * @return The description of the Category that contains the index */ public String getDescription(int index) { }
public String getName()
Copyright 2013