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.