// 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);	}	}
