Histogram.java


This is the syntax highlighted version of Histogram.java from 3.3 Modular Programming of
Introduction to Computer Science by Robert Sedgewick and Kevin Wayne.

/*************************************************************************
 *  Compilation:  javac Histogram.java
 *  Execution:    java Game
 *  Dependencies: Draw.java
 *
 *  Data type to represent a histogram.
 *
 *  Remarks
 *  -------
 *   * too many hard-wired constants
 *
 *************************************************************************/

import java.awt.Color;

public class Histogram {
    private int freq[];     // freq[i] = # occurences of i
    private int N;          // data values are between 0 and N
    private int max;        // maximum number of times a value occurs
    private Draw draw;      // drawing object for histogram

    // values between 0 and N
    public Histogram(String name, int N) {
        this.N    = N;
        this.freq = new int[N + 1];
        this.draw = new Draw(500, 500);
        draw.setTitle(name);
    }
    public Histogram(int N) { this("Histogram", N); }

    // insert the point i into the histogram (it must be between 0 and N or it is rounded)
    public void addDataPoint(int i) {
        if (i < 0) i = 0;
        if (i > N) i = N;
        freq[i]++;
        if (freq[i] > max) max = freq[i];
        // draw();
    }

    // draw the histogram
    public void draw() {
        double yscale = 450.0 / Math.max(5, max);
        double width  = 450.0 / N;

        // draw each bar
        draw.clear(Color.lightGray);
        for (int i = 0; i <= N; i++) {
            double x = 30 + i * (int) width;
            double y = 30 + freq[i] * yscale / 2;
            double height = freq[i] * yscale;
 
            // histogram bar
            draw.go(x, y);
            draw.spot(width / 2, height);
        }

        // draw the labels
        for (int i = 0; i <= N; i = i + N / 10) {
            double x = 30 + i * (int) width;
            draw.go(x, 15);
            draw.write(i + "");
        }
        draw.pause(10);
    }
}


Last updated: Fri Aug 20 11:46:52 EDT 2004 .
Copyright © 2004, Robert Sedgewick and Kevin Wayne.