// HTWin.java// Written by Julian Devlin, 8/97, for the text book// "Introduction to Probability," by Charles M. Grinstead & J. Laurie Snellimport java.applet.Applet;import java.awt.*;public class HTWin	extends java.applet.Applet{	Float[] yCoords;		// Variables for simulation	Float[] xCoords;		SpikeGraph sg;				// AWT elements	Label message;	Label message2;	Button go;	TextField numFlips;	TextField numGames;			Panel graphArea;	Panel controls;	// Set up all controls and put them in the window	public void init() {		message = new Label("tosses per game =");	// Create controls		message2 = new Label("number of games =");		go = new Button("Simulate");		numFlips = new TextField(3);		numGames = new TextField(4);				graphArea = new Panel();				// Set up window		controls = new Panel();		setLayout(new BorderLayout());			controls.setLayout(new FlowLayout());		controls.add(message);		controls.add(numFlips);		controls.add(message2);		controls.add(numGames);		controls.add(go);				sg = new SpikeGraph(); // initialize a graphing space		add("Center", sg);		add("South", controls);	}		// Does the simulation, creating two arrays to store game states, then passes them	// to a SpikeGraph	public void simulate() {		int yCoord;		// Running count of game score		int nf = 0;		try {			nf = Integer.parseInt(numFlips.getText().trim());	// Get user input		}		catch (Exception e) {			numFlips.setText("");			validate();		}		int ng = 0;		try {			ng = Integer.parseInt(numGames.getText().trim());	// Get user input		}		catch (Exception e) {			numGames.setText("");			validate();		}		xCoords = new Float[2 * nf + 1];					// Make arrays		yCoords = new Float[2 * nf + 1];		for (int i = 0; i < 2 * nf + 1; i++)		{			xCoords[i] = new Float(-1 * nf + i);			yCoords[i] = new Float(0);		}				for (int i = 0; i < ng; i++) {				// Do actual simulation			yCoord = 0;			for (int j = 0; j < nf; j++) {			// BETTER INITIALIZATION				if (Math.random() < 0.5) 					yCoord++;				else 					yCoord--;			}			int temp = yCoords[nf + yCoord].intValue();			yCoords[nf + yCoord] = new Float(temp + 1);		}		remove(sg);		sg = new SpikeGraph(xCoords, yCoords);	// Create new SpikeGraph		add("Center", sg);							// Put up the graph		validate();	}		// Watch for a click on the go button	public boolean action(Event evt, Object arg) {		if (evt.target instanceof Button) {			if ((String)arg == "Simulate") {				simulate();			}		}		return true;	}		public Insets insets() {    	return new Insets(5,5,5,5);	}}
