A Simple Calculator

I programmed this together with Uta Hinrichs

(:applet codebase="algds/" code="Calc_App2.class" height="400" width="460":)

The Source

The original description in German:

Benutzung des Taschenrechners

Durch Drücken der jeweiligen Zahlen- bzw. Operatorentasten kann jeder beliebige Term eingegeben werden. Es gilt grundsätzlich Punkt- vor Strichrechnung. Hat man sich vertippt gibt es zwei Möglichkeiten:

  • bei einem Zahlentippfehler kann man die C-Taste benutzen, die die zuletzt eingegebene Zahl löscht.
  • bei einem Operatorentippfehler gibt man einfach die gewünschten Operator direkt hinterher ein. Der falsch eingegebene Operator wird dann gelöscht.

Bei einer Division durch Null wird die Fehlermeldung „Infinity“ ausgegeben und alle vorherigen Rechenoperationen werden gelöscht.

Der Taschenrechner akzeptiert Zahlen bis zu neun Stellen. Alle weiteren Eingaben von Zahlen werden ignoriert.

Mit Hilfe einer „Point“-Taste lassen sich auch Dezimalstellen eingeben, wieder beschränkt auf neun Stellen.

Es besteht die Möglichkeit, Zahlen zu speichern. Dies geschieht mit der M_in Taste. Die M_out- Taste wiederum gibt die Zahl aus dem Speicher aus.

Zuletzt ist die AC-Taste zu nennen. Sie ermöglicht einen völligen Neustart des Taschenrechners. Drückt man die AC-Taste, werden sämtliche Rechenoperationen gelöscht (d.h. beide Stacks) und der Display wird auf „0“ gesetzt.

Fehlerbehandlungen

Die Fehlerbehandlung ist bei der Programmierung eines Taschenrechners von äußerster Relevanz, da gerade bei einer solchen Rechenmaschine über „normale“ Fehler hinaus noch die Tippfehlers des Benutzers abgefangen werden müssen.

Wir haben folgende Fehlerquellen herausgefunden und abgefangen:

  • Nulldivision (wurde abgefangen durch eine AritmeticException)
  • Eingabe von zu langen Zahlen ( wurde abgefangen durch die Methode output_plus )
  • Eingabe von zwei Operatoren hintereinander ( wurde abgefangen durch den Zähler „lastButton“)
  • Eingabe von mehr als einem Dezimalpunkt ( wurde abgefangen durch die Methoden get_pointPressed und set_pointPressed)