i1.Soft: Typumwandlung und Kontrollstrukturen
25.10 2009 20:50
Nachdem der Welt "Hallo" gesagt wurde (vgl. Aufgabe1) und wir uns mit dem kleinen und großen 1*1 vertraut gemacht haben (vgl. Aufgabe2), kümmern wir uns nun um das Einlesen von Eingaben.
Bei der Auswertung der Eingabe sollen wir sicherstellen, dass es sich um eine Ganzzahl handelt - Positiv oder Negativ sei einmal dahingestellt. Sofern die Eingabe stimmt, sprich sich zwischen "0" und und "9" befindet und maximal ein "-" als Vorzeichen besitzt, soll alles in allem in einer Variable "zahlentext" gespeichert werden.
String zahlentext;
Nichtsdestotrotz (was ein Wort...) brauchen wir eine konstante Schleife die solange läuft wie unsere Eingabe lang ist und auch jeden Einzelteil davon in einer temporalen Variablen festhält und überprüft um welche Art von Eingabe es sich handelt.
Eins nach dem anderen und so kümmern wir uns zuerst um die Endlosschleife, die die Eingabe abfängt und in eine Variable schreibt vom Typ Integer, da die Eingabe im ASCII Format festgehalten wird, sprich mit Werten zwischen *...255.
int i=0;
while(true){
i=System.in.read();
...
}
Wichtig: Sobald wir System.in.read(); verwenden, möchte der Kompiler sicherstelen, dass wir auch Exceptions beachten die auftreten könnten. Entsprechend erweitern wir einfach die main um einen Zusatz:
public static void main(String[] args) throws IOException {
...
}
Um nun zu überprüfen ob die Eingabe auch "legitim" der Aufgabenstellung entspricht, sprich zwischen "0" und "9" und maximal ein "-" ist, kommt eine "if-Abfrage" zum Einsatz. Sollte sie "Erfolg" haben, wird das Zeichen in unseren "zahlentext" geschrieben, bzw. als char hinzugefügt.
if(i>='0' && i<='9' || i=='-')
zahlentext+=(char)i;
Wichtig ist noch, dass das "Enter" als Ende der Eingabe aufgefasst wird und das Einlesen, sprich die Schleife beendet, bzw. aus dieser heraus ein break stattfindet. Das "Enter" als solches findet man im ASCII Zeichensatz als "\n" und "\r", je nach Betriebssystem.
else if(i=='\n' || i=='\r')
break;
Für alle anderen Fälle muss es sich um eine fehlerhafte Eingabe handeln und/oder um den Versuch eine nicht Ganzzahl einzugeben und kann dementsprechend mit einer Fehlermeldung abgespeist werden.
else{
System.out.println(""); //dient einer schöneren Formatierung der Ausgabe
System.err.println("Ungültige Eingabe < " +(char)i +" > wird bei der Auswertung versucht zu ignorieren.");
}
Da nun das ganze Einlese- und Auswertungsprozedere gehandhabt wird von unserem Programm können wir das "Abgespeicherte" auch zur Kontrolle auf der Konsole ausgeben lassen, bzw. sogar noch durch ein "Umwandeln/Parsen" aus dem gespeicherten String wieder eine Zahl werden lassen.
System.out.println("Ausgabe der Zeichenkette : "+zahlentext);
int zahl=Integer.parseInt(zahlentext);
System.out.println("Ausgabe der Zahl: "+zahl);
Kommentare
- Noch keine Kommentare vorhanden.
