JMU
logoQuAQI.png
The Categorizer Class


Introduction

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).

Details
Attributes:
This class must, at a minimum, contain the following private attributes:

    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.

The Explicit Value Constructor:
This class must implement the following explicit value constructor:
    /**
     * 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.

The indexOf(double) Method:
This class must implement the following method:
    /**
     * 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)
    {
    }
    
The getDescription(int) Method:
This class must implement the following method:
    /**
     * 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)
    {
    }
    
Accessors:
This class must implement the following accessors:
    public String getName()
    

Copyright 2013