// StirlingApproximations.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 StirlingApproximations	extends java.applet.Applet{	TextArea disp;		// Area to display HT		Panel contp;		// Panel for user controls		Label numl1;			// Controls	TextField num1;	Label numl2;			// Controls	TextField num2;	Button go;			// Initialize applet	public void init()	{			numl1 = new Label("Min n =");			// Create controls		num1 = new TextField("1", 4);		numl2 = new Label("Max n =");			// Create controls		num2 = new TextField("10", 4);		go = new Button("Go");				disp = new TextArea(10, 20);		// Create display area				setLayout(new GridLayout(2, 1));		add(disp);				contp = new Panel();				// Set up control panel		add(contp);				contp.setLayout(new FlowLayout());		contp.add(numl1);							contp.add(num1);		contp.add(numl2);							contp.add(num2);		contp.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 min, int max)    {    	int fact;    	float stir;    	for (int i = 0; i < max - min + 1; i++) {    		fact = 1;    		for (int j = 1; j <= min + i; j++) {    			fact *= j;    		}    		stir = (float) (Math.pow((double) (min + i), (double) (min + i)) *     			Math.pow(Math.E, (double) (-1 * (min + i))) *    			Math.pow(2 * Math.PI * (double) (min + i), .5));    		disp.appendText("n - " + String.valueOf(min + i) + "      n! - " +     			String.valueOf(fact) + "      approx - " + String.valueOf(stir)    			+ "      ratio - " + String.valueOf((float) fact / stir));    		disp.appendText("\n");    	}	}}
