import java.applet.Applet; import java.awt.*; class BadOperationException extends Exception { String label; BadOperationException() { label = "E"; } } public class FourCalculator extends Applet { Button add; Button subtract; Button multiply; Button divide; Button equals; Button clear; Button lastOperation; TextField result; float current = 0; public void init() { add = new Button("+"); add(add); subtract = new Button("-"); add(subtract); multiply = new Button("*"); add(multiply); divide = new Button("/"); add(divide); equals = new Button("="); add(equals); clear = new Button("Clear"); add(clear); result = new TextField(20); add(result); lastOperation = null; } public boolean action(Event event, Object arg) { try { if ((event.target == add) || (event.target == subtract) || (event.target == multiply) || (event.target == divide)) { completeOperation(); lastOperation = (Button) event.target; result.setText(""); result.requestFocus(); } else if (event.target == equals) { completeOperation(); lastOperation = null; String text = Float.toString(current); result.setText(text); result.requestFocus(); } else if (event.target == clear) { current = 0; lastOperation = null; result.setText(""); result.requestFocus(); } } catch (BadOperationException e) { lastOperation = null; result.setText(e.label); } return true; } void completeOperation() throws BadOperationException { String text = result.getText(); Float value; try { value = Float.valueOf(text); } catch (java.lang.NumberFormatException ne) { BadOperationException oe = new BadOperationException(); throw oe; } float f = value.floatValue(); if (lastOperation == add) { current += f; } else if (lastOperation == subtract) { current -= f; } else if (lastOperation == multiply) { current *= f; } else if (lastOperation == divide) { if (f == 0) { // Prevent division by zero BadOperationException oe = new BadOperationException(); throw oe; } else { current /= f; } } else if (lastOperation == null) { current = f; } } }