Java: kleiner Taschenrechner
26.10 2008 09:05
In der neuen Java Aufgabe sollen wir einen kleinen Taschenrechner programmieren, der zwei einstellige Dezimalzahlen aufaddieren kann. Es sollen zusätzlich Fehlermeldungen ausgegeben werden, wenn die Eingabe nicht <Zahl><+><Zahl> entspricht.
Vorüberlegung
Um unser Programm programmieren zu können, hilft es oft sich zu verinnerlichen, was das Programm eigentlich machen soll. Dieser mögliche Programmablauf ist hier einmal in Worten und mit entsprechenden Java-Code dargelegt:
1: Erstes Zeichen einlesen. (int input = System.in.read())
2: Ist dieses Zeichen eine Ziffer? (input >= '0' && input <= '9')
Das Zeichen ist eine Ziffer:
2a: Diese Ziffer in eine Zahl umwandeln und merken. (int zahl1 = input - '0')
Das Zeichen ist keine Ziffer:
2b: Fehlermeldung ausgeben (System.out.println("ZAHL1 FEHLER: " + (char)input + " ist kein gültiges Zeichen - ERWARTET: 1-stellige Dezimalzahl")) und beenden (return)
3: Zweites Zeichen einlesen. (input = System.in.read())
4: Ist dieses Zeichen ein Plus? (input == '+')
Dieses Zeichen ist ein Plus:
4a: Weitermachen
Dieses Zeichen ist kein Plus:
4b: Fehlermeldung ausgeben (System.out.println("OPERATOR FEHLER: " + (char)input + " ist kein gültiges Zeichen - ERWARTET: Operator +")) und beenden (return)
5: Drittes Zeichen einlesen. (input = System.in.read())
6: Ist dieses Zeichen eine Ziffer? (input >= '0' && input <= '9')
Das Zeichen ist eine Ziffer:
6a: Diese Ziffer in eine Zahl umwandeln und merken. (int zahl2 = input - '0')
Das Zeichen ist keine Ziffer:
6b: Fehlermeldung ausgeben (System.out.println("ZAHL2 FEHLER: " + (char)input + " ist kein gültiges Zeichen - ERWARTET: 1-stellige Dezimalzahl")) und beenden (return)
7: Berechnen. (int summe = (zahl1 + zahl2))
8: Ergebnis ausgeben. (System.out.println("Ergebnis: " + zahl1 + " + " + zahl2 + " = " + summe))
int zahl1 = input - '0'
Wieso muss man das eingelesene Zeichen in eine Zahl umwandeln und wie funktioniert das?
Mit int input = System.in.read() wird der Variable input (Typ: int) der Dezimalwert des mit System.in.read() eingelesenen ASCII-Zeichens zugewiesen. '0' entspricht dem Dezimalwert 48, '1' dem von 49 etc.
Um nun Dezimalwerte zu erhalten, die den Zeichen entsprechen die wir eingeben, müssen wir lediglich von input die Zahl 48 (= Dezimalwert des ASCII-Zeichens '0' ) abziehen.
z. B.: "5"
Wir geben 5 ein.
Dieses Zeichen '5' hat den Dezimalwert 53.
Diese 53 werden input zugewiesen.
Dass die Variable zahl1 den Wert 5 und nicht 53 zugewiesen bekommt, müssen wir von der 53 die 48 (oder eben den Dezimalwert des ASCII-Zeichens '0') abziehen
zahl1 = input - 53 oder: zahl1 = input - '0'
In Form bringen
Hier die Klasse java1_calc mit der Main-Methode:
/* java1_calc.java */
public class java1_calc {
public static void main(String[] args) throws Exception{
}
}
Nun müssen wir nur noch unsere Überlegungen in die Main-Methode schreiben:
/* java1_calc.java */
public class java1_calc {
public static void main(String[] args) throws Exception{
int zahl1 = 0;
int zahl2 = 0;
int input;
// Erstes Zeichen einlesen
input = System.in.read();
// Ist dieses Zeichen eine Ziffer?
if(input >= '0' && input <= '9'){
// Diese Ziffer in eine Zahl umwandeln und merken.
zahl1 = input - '0';
} else {
// Fehlermeldung ausgeben & beenden
System.out.println("ZAHL1 FEHLER: " + (char)input + " ist kein gültiges Zeichen - ERWARTET: 1-stellige Dezimalzahl");
return;
}
// (...)
// Berechnen
int summe = (zahl1 + zahl2);
// Ergebnis ausgeben.
System.out.println("Ergebnis: " + zahl1 + " + " + zahl2 + " = " + summe);
}
}
Nun müssen nur noch die fehlenden Schritte ergänzt werden. Aber das könnt ihr ja ;)
Hier hab ich die Aufgabe aus dem Tutorium noch mit ein paar Kommentaren versehen, falls jemand Lust hat, sich das Ganze nocheinmal anzusehen.
Kommentare
- Noch keine Kommentare vorhanden.
- Dieser Eintrag kann nicht mehr kommentiert werden.
