// BinomialPlot.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 BinomialPlot extends java.applet.Applet { Float[] xCoords; // Variables for simulation Float[] yCoords; SpikeGraph sg; // AWT elements Panel dispArea; Panel controls; // Panel for user controls Label numl1, numl2, numl3, numl4; // Controls TextField num1, num2, num3, num4; Button go; GridBagLayout gbl; GridBagConstraints cc; // Initialize applet public void init() { numl1 = new Label(" n1 = "); // Create controls num1 = new TextField("40", 4); numl2 = new Label(" n2 = "); // Create controls num2 = new TextField("80", 4); numl3 = new Label(" n3 = "); // Create controls num3 = new TextField("160", 4); numl4 = new Label(" p = "); // Create controls num4 = new TextField(".5", 4); go = new Button("Go"); sg = new SpikeGraph(); // initialize a graphing space dispArea = new Panel(); // Set up window controls = new Panel(); setLayout(new BorderLayout(5, 5)); add("South", controls); add("Center", dispArea); dispArea.setLayout(new GridLayout(1, 1)); dispArea.add(sg); gbl = new GridBagLayout(); controls.setLayout(gbl); cc = new GridBagConstraints(); cc.gridx = 0; cc.gridy = 0; gbl.setConstraints(numl1, cc); controls.add(numl1); cc.gridx = 1; gbl.setConstraints(num1, cc); controls.add(num1); cc.gridx = 2; gbl.setConstraints(numl2, cc); controls.add(numl2); cc.gridx = 3; gbl.setConstraints(num2, cc); controls.add(num2); cc.gridx = 4; gbl.setConstraints(numl3, cc); controls.add(numl3); cc.gridx = 5; gbl.setConstraints(num3, cc); controls.add(num3); cc.gridx = 0; cc.gridy = 1; gbl.setConstraints(numl4, cc); controls.add(numl4); cc.gridx = 1; gbl.setConstraints(num4, cc); controls.add(num4); cc.gridx = 2; cc.gridwidth = 4; gbl.setConstraints(go, cc); controls.add(go); validate(); } // Handle events public boolean handleEvent(Event evt) { if (evt.target instanceof Button) { if (evt.target == go && evt.id == Event.ACTION_EVENT) // When button is clicked { simulate(Integer.valueOf(num1.getText()).intValue(), Integer.valueOf(num2.getText()).intValue(), Integer.valueOf(num3.getText()).intValue(), Float.valueOf(num4.getText()).floatValue()); return true; // Generate correct number of tosses } } return super.handleEvent(evt); // Handle other events as usual } // Calculate probabilities public void simulate(int num1, int num2, int num3, float prob) { float temp; int length = (int) Math.max(Math.max((double) num1, (double) num2), (double) num3) + 1; xCoords = new Float[length]; yCoords = new Float[length]; for (int i = 0; i < length; i++) { xCoords[i] = new Float(i); temp = Combinatorics.bernoulli(num1, prob, i) + Combinatorics.bernoulli(num2, prob, i) + Combinatorics.bernoulli(num3, prob, i); yCoords[i] = new Float(temp); } dispArea.remove(sg); sg = new SpikeGraph(xCoords, yCoords); // Create new SpikeGraph dispArea.add(sg); // Put up the graph validate(); } }