
Purpose:
A Category object is, essentially, an interval of
values and a corresponding interval of indexes.
Category objects can be used in a wide variety of
applications. For example, when used as part of a system for
calculating the Air Quality Index (AQI) for carbon monoxide (CO),
the Category with a description of "Moderate" would correspond to
the values in the interval [4.4,9.5) and indexes in the interval
[50,100).
Category objects are immutable.
Interval: An interval is a set of real numbers or integers defined by a lower bound and an upper bound. The notation \([a,b)\) is used to denote the half-open interval defined as \(\{x: a \leq x \lt b\}\).
Linear Interpolation:
Interpolation is a method of
calculating a number in an interval. In linear interpolation, the number
is a linear combination of the lower and upper bounds of the interval.
A Category uses linear interpolation to calculate the
index from the value. Letting \(I_\text{low}\) and
\(I_\text{high}\) denote the left and right ends of the interval
of indexes, \(V_\text{low}\) and
\(V_\text{high}\) denote the left and right ends of the interval
of values, and \(V\) denote the known value, the corresponding
index, \(I\), is defined as:
\[
I = I_{\text{low}} +
\frac{I_\text{high}-I_\text{low}}{V_\text{high}-V_\text{low}} \cdot
(V - V_\text{low})
\]
Note that, since \(I\) is an integer index, the right-hand side must be rounded to the nearest integer. For example, given an interval of values of \([4.4, 9.5)\) and an interval of indexes of \([50, 100)\), the value \(8.4\) corresponds to an index of:
\[ 50 + \frac{100 - 50}{9.5 - 4.4} \cdot (8.4 - 4.4) = 50 + \frac{50}{5.1} \cdot 4 = 89.216 \]which is rounded to \(89\).
description - A String containing
a description of this Category (e.g., "Moderate")indexHigh - An int containing the
right end of the interval of indexes (e.g., 100)indexLow - An int containing the
left end of the interval of indexes (e.g. 50)valueHigh - A double containing the
right end of the interval of values (e.g., 9.5)valueLow - A double containing the
left end of the interval of values (e.g., 4.4)It may contain other private attributes as well.
/**
* Explicit Value Constructor.
*
* @param description A textual description of the Category (e.g., "Moderate")
* @param indexLow The left end of the interval of indexes (e.g. 50)
* @param indexHigh The right end of the interval of indexes (e.g., 100)
* @param valueLow The left end of the interval of values (e.g., 4.4)
* @param valueHigh The right end of the interval of values (e.g., 9.5)
*/
public Category(String description,
int indexLow, int indexHigh,
double valueLow, double valueHigh)
{
}
/**
* Calculate the corresponding index (using linear interpolation)
* for a value in the interval of values that defines this Category.
* For example, if this Category has an interval of values of [4.4,9.5)
* and an interval of indexes of [50,100), this method returns 89
* when passed a value of 8.4. (Note: This method uses Math.round()
* to perform the rounding and typecasts the result to an int.)
*
* @param value The value of interest
* @return The corresponding index (or -1 if the value is invalid)
*/
public int indexOf(double value)
{
}
/**
* Determine if the given index is included in this
* Category
*
* @param index The index of interest
* @return true if the index is in this Category; false otherwise
*/
public boolean includesIndex(int index)
{
}
/**
* Determine if the given value is included in this
* Category
*
* @param value The value of interest
* @return true if the value is in this Category; false otherwise
*/
public boolean includesValue(double value)
{
}
public String getDescription()
Copyright 2013