Um die Eingaben des Benutzers zu lesen, benötigen wir eine Variable vom Typ Scanner
.
Der Typ Scanner
und die benötigten Befehle sind nicht Teil der Java-Basis, sondern werden in einer externen Bibliothek definiert.
Daher müssen wir die Bibliothek java.util.Scanner
in unserem Sourcecode importieren.
import java.util.Scanner;
importiert die externe Bibliothek.public class …
stehen.static Scanner scanner;
deklarieren wir die Variable vom Typ Scanner
.public class …
geschrieben.scanner
. Natürlich können Sie auch einen anderen Bezeichner verwenden.scanner = new Scanner(System.in);
öffnet die Verbindung zur Konsole.constructor: initialize attributes
scanner.close();
static void main() { … }
import java.util.Scanner; /** * short description of this program * * @author Ibid umm * @since yyyy-mm-dd * @version 1.0 */ public class Template { // declare attributes static Scanner scanner; /** * constructor: initialize attributes */ public Template() { scanner = new Scanner(System.in); } /** * starts the execution * * @param args * command line arguments */ public static void main(String[] args) { Template program = new Template(); program.run(); scanner.close(); } /** * description */ private void run() { // TODO: realize the program logic } } | Importieren der externen Bibliothek java.util.Scanner. Diese Bibliothek definiert den Typ ''Scanner'' und enthält alle Befehle, die wir zum Lesen von der Konsole benötigen. Deklaration einer Variable vom Typ "Scanner". Wir geben der Variable den Bezeichner "scanner". Natürlich könnten Sie auch einen anderen Bezeichner verwenden. Öffnen der Verbindung zur Konsole. Schliessen der Verbindung zur Konsole. |
Wenn das Programm die Benutzereingaben lesen soll, so wartet die weitere Verarbeitung so lange, bis der Benutzer die Enter-Taste drückt. Erst mit dem Drücken der Enter-Taste werden die eingegebenen Zeichen an unser Programm übertragen und können verarbeitet werden.
Alle Eingaben des Benutzers werden vom Programm als Text (Zeichenkette) gelesen. Möchte der Benutzer eine Zahl eingeben, so muss er in der Konsole die entsprechende Ziffernfolge (Zeichen) eingeben. Erst im Programm wird aus dieser Ziffernfolge eine Zahl.
Wie in der Einleitung geschrieben, werden alle Eingaben des Benutzers als Zeichen (character) gelesen.
Um die eingegebenen Ziffern als Zahl zu speichern, muss der Datentyp angepasst werden.
Dazu stellt Ihnen die Scanner-Bibliothek Befehle wie .nextInt()
oder .nextDouble()
zur Verfügung.
Diese Befehle lesen die Zeichen von der Konsole ein und wandeln die Zahl in den jeweiligen Datentyp um.
Nun können Sie die umgewandelte Zahl in eine Variable vom Typ int
, double
, float
oder einem anderen Zahlentyp speichern.
Natürlich muss der Datentyp der verwendeten Variable zum eingesetzten Befehl passen.
/** * description */ private void run() { int zahl1; double zahl2; zahl1 = scanner.nextInt(); scanner.nextLine(); // Enter-Taste aus dem Scanner löschen zahl2 = scanner.nextDouble(); scanner.nextLine(); // Enter-Taste aus dem Scanner löschen }
scanner.nextLine()
Nach jedem nextInt()
, nextDouble()
, etc. ist es notwendig die verbleibende „Enter-Taste“ noch aus dem Scanner zu löschen.
Ihre Eingabe in der Konsole war z.B. 15
und dann haben Sie die „Enter-Taste“ gedrückt. Der Scanner speichert sowohl die Zahl 15
wie auch die „Enter-Taste“, der Befehl nextInt()
, nextDouble()
, etc. holt jedoch nur die Zahl aus dem Scanner und die „Enter-Taste“ bleibt im Scanner hängen. Diese muss anschliessen noch aus dem Scanner gelöscht werden!
Im Beispiel wird eine Ganzzahl mit dem Befehl nextInt()
gelesen und in die Variable zahl1
vom Typ int
gespeichert.
Danach wird eine Dezimalzahl mit dem Befehl nextDouble()
gelesen und in die Variable zahl2
vom Typ double
gespeichert.
Für andere Datentypen existieren ebenfalls die entsprechenden next
-Befehle.
Zum Beispiel:
Mit dem Befehl nextLine()
werden alle vom Benutzer eingegebenen Zeichen von der Konsole gelesen.
Um eine solche Zeichenkette zu speichern, benötigen Sie den Datentyp String
.
/** * description */ private void run() { String einText; einText = scanner.nextLine(); }
Zunächst werden wir aber vor allem einzelne Buchstaben (Character) und Zahlen verarbeiten.
Der Datentyp String
wird im Modul 404 genauer behandelt.
Um einzelne Buchstaben zu lesen, müssen wir den Befehl charAt(n)
verwenden.
Das Argument in den runden Klammern gibt an, welches Zeichen wir lesen möchten:
/** * description */ private void run() { char zeichen; zeichen = scanner.nextLine().charAt(0); }
In diesem Beispiel lesen wir das erste Zeichen, das der Benutzer eingeben hat. Alle weiteren Zeichen werden einfach ignoriert.
Der Benutzer kann nicht erraten, was das Programm von ihm möchte. Daher ist es wichtig, dass unser Programm klare Informationen liefert, was der Benutzer nun machen soll.
Geben Sie jeweils an
System.out.print ("Bitte Anzahl eingeben (1-99) >"); anzahl = scanner.nextInt(); scanner.nextLine(); // Enter-Taste aus dem Scanner löschen
System.out.print( "Total = " + summe);
import java.util.Scanner; /** * short description of this program * * @author Ibid umm * @date yyyy-mm-dd * @version 1.0 */ public class Template { // declare attributes static Scanner scanner; /** * constructor: initialize attributes */ public Template() { scanner = new Scanner(System.in); } /** * starts the execution * * @param args * command line arguments */ public static void main(String[] args) { Template program = new Template(); program.run(); scanner.close(); } /** * description */ private void run() { int anzahl; double preis; double summe; System.out.print ("Bitte Anzahl eingeben >"); anzahl = scanner.nextInt(); scanner.nextLine(); // Enter-Taste aus dem Scanner löschen System.out.print ("Preis>"); preis = scanner.nextDouble(); scanner.nextLine(); // Enter-Taste aus dem Scanner löschen summe = preis * anzahl; System.out.print( "Total = " + summe); } }