// Records.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 Records	extends java.applet.Applet{	TextArea disp;		// Area to display HT		Panel dispArea;	Panel controls;		// Panel for user controls		Label numl1;			// Controls	TextField num1;	Label numl2;			// Controls	TextField num2;	Button go;		GridBagLayout gbl;	GridBagConstraints cc;		Combinatorics myC;	String[] input;			// Initialize applet	public void init()	{			numl1 = new Label("Number of permutations =");			// Create controls		num1 = new TextField("100", 4);		numl2 = new Label("No. of different set sizes =");			// Create controls		num2 = new TextField("3", 4);		go = new Button("Go");				disp = new TextArea(15, 20);		// Create display area				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(disp);				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 = 0;		cc.gridy = 1;		gbl.setConstraints(numl2, cc);		controls.add(numl2);				cc.gridx = 1;		gbl.setConstraints(num2, cc);		controls.add(num2);				cc.gridx = 0;		cc.gridy = 2;		cc.gridwidth = 2;		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			{				disp.setText("");			// Reset output window        		simulate(Integer.valueOf(num1.getText()).intValue(),         			Integer.valueOf(num2.getText()).intValue());        		return true;					// Generate correct number of tosses			}		}		return super.handleEvent(evt);	// Handle other events as usual	}		// Calculate probabilities    public void simulate(int num, int steps)    {    	float[] avgRecs = new float[steps];    	int records;    	int highest;    	String[] input;    	String[] results;    	for (int size = 0; size < steps; size++) {    		input = new String[(size + 1) * 10];	    	for (int i = 0; i < (size + 1) * 10; i++) {	    		input[i] = String.valueOf(i);	    	}	    	myC = new Combinatorics(input);	    	    		records = 0;			for (int i = 0; i < num; i++) {				highest = -1;		    	results = myC.randPerm();		    	for (int j = 0; j < input.length; j++) {		    		if (Integer.valueOf(results[j]).intValue() > highest) {		    			highest = Integer.valueOf(results[j]).intValue();		    			records++;		    		}		    	}		    }		    avgRecs[size] = (float) records / (float) num;	    }	    	    disp.appendText("Average no. of records for set size:\n\n");	    for (int i = 0; i < steps; i++) {	    	disp.appendText((i + 1) * 10 + "    -    " + 	    		String.valueOf(avgRecs[i]) + "\n");		    }    }}
