// Branch.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 Branch extends java.applet.Applet { TextArea ta; // AWT elements Panel dispArea; Panel controls; // Panel for user controls Panel prob; Label numl; // Controls TextField num; Label[] pl; TextField[] p; Button go; GridBagLayout gbl, gblp; GridBagConstraints cc, ccp; float[] density; float mean, std; // Initialize applet public void init() { numl = new Label("Maximum generations = "); // Create controls num = new TextField("10", 4); go = new Button("Go"); pl = new Label[10]; p = new TextField[10]; for (int i = 0; i < 10; i++) { pl[i] = new Label("P(" + i + ") ="); p[i] = new TextField("0", 4); } p[0].setText(".2"); p[1].setText(".5"); p[2].setText(".3"); ta = new TextArea(15, 20); dispArea = new Panel(); // Set up window controls = new Panel(); prob = new Panel(); setLayout(new BorderLayout(5, 5)); add("South", controls); add("West", prob); add("Center", dispArea); dispArea.setLayout(new GridLayout(1, 1)); dispArea.add(ta); gblp = new GridBagLayout(); ccp = new GridBagConstraints(); prob.setLayout(gblp); for (int i = 0; i < 10; i++) { ccp.gridx = 0; ccp.gridy = i; gblp.setConstraints(pl[i], ccp); prob.add(pl[i]); ccp.gridx = 1; gblp.setConstraints(p[i], ccp); prob.add(p[i]); } gbl = new GridBagLayout(); controls.setLayout(gbl); cc = new GridBagConstraints(); cc.gridx = 0; cc.gridy = 0; gbl.setConstraints(numl, cc); controls.add(numl); cc.gridx = 1; gbl.setConstraints(num, cc); controls.add(num); cc.gridx = 0; cc.gridy = 1; cc.gridwidth = 2; gbl.setConstraints(go, cc); controls.add(go); validate(); } // Handle events public boolean handleEvent(Event evt) { String minStr, maxStr; if (evt.target instanceof Button) { if (evt.target == go && evt.id == Event.ACTION_EVENT) // When button is clicked { simulate(Integer.valueOf(num.getText()).intValue()); return true; // Generate correct number of tosses } } return super.handleEvent(evt); // Handle other events as usual } public float genFunctionDiscrete(float[] prob, float x) { float sum = 0; for (int i = 0; i < prob.length; i++) { if (x == 0 && i == 0) sum += prob[i]; // 0^0 must be defined as one else sum += prob[i] * (float) Math.pow((double) x, (double) i); } return sum; } // Calculate probabilities public void simulate(int num) { ta.setText(""); float[] prob = new float[10]; float probability = 0; float sum = 0; for (int i = 0; i < 10; i++) { prob[i] = Float.valueOf(p[i].getText()).floatValue(); sum += prob[i]; } for (int i = 0; i < 10; i++) { prob[i] = round(prob[i] / sum, .001f); p[i].setText(String.valueOf(prob[i])); } for (int g = 1; g <= num; g++) { probability = genFunctionDiscrete(prob, probability); ta.appendText(g + " " + probability + "\n"); } validate(); } public float round(float num, float accuracy) { return accuracy * Math.round(num / accuracy); } }