[ Team LiB ] |

## 2.6 Computing StatisticsSo far, the classes we've defined have modeled
mathematical abstractions like rectangles and complex numbers. It is
easy to imagine other objects that model things like a mailing
address or a record in a database. This is not a requirement,
however: classes do not have to model
"things." They merely have to hold
some state (i.e., define some fields) and optionally define methods
to manipulate that state. Example 2-6 is just this
kind of class: it computes simple statistics about a series of numbers.
As numbers are passed to the ## Example 2-6. Averager.javapackage je3.classes; /** * A class to compute the running average of numbers passed to it **/ public class Averager { // Private fields to hold the current state. private int n = 0; private double sum = 0.0, sumOfSquares = 0.0; /** * This method adds a new datum into the average. **/ public void addDatum(double x) { n++; sum += x; sumOfSquares += x * x; } /** This method returns the average of all numbers passed to addDatum( ) */ public double getAverage( ) { return sum / n; } /** This method returns the standard deviation of the data */ public double getStandardDeviation( ) { return Math.sqrt(((sumOfSquares - sum*sum/n)/n)); } /** This method returns the number of numbers passed to addDatum( ) */ public double getNum( ) { return n; } /** This method returns the sum of all numbers passed to addDatum( ) */ public double getSum( ) { return sum; } /** This method returns the sum of the squares of all numbers. */ public double getSumOfSquares( ) { return sumOfSquares; } /** This method resets the Averager object to begin from scratch */ public void reset( ) { n = 0; sum = 0.0; sumOfSquares = 0.0; } /** * This nested class is a simple test program we can use to check that * our code works okay. **/ public static class Test { public static void main(String args[ ]) { Averager a = new Averager( ); for(int i = 1; i <= 100; i++) a.addDatum(i); System.out.println("Average: " + a.getAverage( )); System.out.println("Standard Deviation: " + a.getStandardDeviation( )); System.out.println("N: " + a.getNum( )); System.out.println("Sum: " + a.getSum( )); System.out.println("Sum of squares: " + a.getSumOfSquares( )); } } } Example 2-6 introduces
an important new feature. The % java je3.classes.Averager.Test However, current versions of the
Java SDK
don't correctly map from the class name
% java je3.classes.Averager$Test On a Unix system, however, you should be aware that the
% java je3.classes.Averager\$Test or: % java 'je3.classes.Averager$Test' You must use this technique whenever you need to run a Java program that is defined as an inner class. |

[ Team LiB ] |