// CoinTosses.java
// This applet prints out random heads and tails, and keeps track
// of the number of heads.

// Written by Julian Devlin, 8/97, for the text book
// "Introduction to Probability," by Charles M. Grinstead & J. Laurie Snell

// Packages we need
import java.awt.*;
import java.applet.Applet;
import java.util.Random;


public class CoinTosses extends Applet //implements Runnable
{
	TextArea disp;		// Area to display HT
	
	Panel contp;		// Panel for user controls
	
	Label numl;			// Controls
	TextField num;
	Button go;
	
	Random randGen;		// Random number generator
	
	// Initialize applet
	public void init()
	{	
		numl = new Label("No. of flips");			// Create controls
		num = new TextField("100", 4);
		go = new Button("Go");
		
		contp = new Panel();				// Set up control panel
		contp.add(numl);					
		contp.add(num);
		contp.add(go);
		contp.setLayout(new FlowLayout());
		
		disp = new TextArea(20, 30);		// Create display area
		
		resize(500,400);					// Set up applet
		setLayout(new FlowLayout());
		add(disp);
		add(contp);
		
		validate();
		
		randGen = new Random();			// Create random number generator
	}
	
	// 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
        		generate(Integer.valueOf(num.getText()).intValue());
        		return true;					// Generate correct number of tosses
			}
		}
		return super.handleEvent(evt);	// Handle other events as usual
	}
	
	// Generate n random coin tosses, and keep track of the number of heads
    public void generate(int n)
    {
    	int count = 0;
    	float randFloat;
    	float percent;
    	for(int i = 0; i < n; i++)
    	{
    		randFloat = randGen.nextFloat();
    		if (randFloat < .5)
    		{
    			disp.appendText("H");		// Determine Heads or Tails
    			count++;
    		}
    		else
    			disp.appendText("T");
    		if (i%30 == 29)				// Wrap after 30 flips
    			disp.appendText("\n");
    	}
    	percent = ((float) count/ (float) n) * 100;	// Do proportion
    	disp.appendText("\n");							// print out
    	disp.appendText(Integer.toString(count));
    	disp.appendText(" heads out of ");
    	disp.appendText(Integer.toString(n));
    	disp.appendText(" = ");
    	disp.appendText(Float.toString(percent));
    	disp.appendText(" %");
	}	
}