1. Lesen von der Konsole mitSystem.in
In den vorherigen Lektionen haben wir uns mit den Befehlen zum Anzeigen von Informationen auf dem Bildschirm vertraut gemacht. Dazu haben wir das System.out
Objekt und seine print()
und- println()
Methoden verwendet. Es ist einfach und bequem.
Aber wie Sie wahrscheinlich schon vermutet haben, reicht uns die Anzeige von Informationen auf dem Bildschirm nicht aus. Der Zweck der meisten Programme besteht darin, für den Benutzer etwas Nützliches zu tun. Das bedeutet, dass es sehr oft erforderlich ist, dass der Benutzer Daten über die Tastatur eingeben kann.
Genau wie für die Ausgabe haben wir auch für die Dateneingabe ein spezielles Objekt – System.in
. Aber leider ist es für uns nicht so bequem, wie wir es gerne hätten. Damit können wir Daten zeichenweise von der Tastatur lesen .
Um dies zu verbessern, werden wir eine andere Klasse verwenden, die System.in
uns in Kombination mit dem Objekt alles bietet, was wir brauchen. Längst gibt es in Java Kurse für jeden Anlass. Und einen von ihnen werden wir jetzt kennenlernen.
2. Scanner
Klasse
Die Scanner
Klasse (vollständiger Name: java.util.Scanner
) kann Daten aus verschiedenen Quellen lesen, z. B. der Konsole, Dateien und dem Internet. Wenn wir möchten, dass Daten von der Tastatur gelesen werden, müssen wir das System.in
Objekt als Argument übergeben, das als Datenquelle dient. Und dann wird das Scannerobjekt herausfinden, was es damit machen soll.
Das Lesen über die Tastatur mithilfe eines Scanner
Objekts würde etwa so aussehen:
Code | Erläuterung |
---|---|
|
Wir erstellen ein Scanner Objekt. Wir lesen eine Textzeile von der Tastatur. Wir lesen eine Zahl von der Tastatur ab. |
Es sieht einfach aus, aber ist es wirklich so einfach?
Ich denke, Sie haben sicher eine Menge Fragen, und jetzt werden wir sie beantworten.
Aber lassen Sie uns zunächst ein Beispiel für ein vollständiges Programm demonstrieren, das die Scanner
Klasse verwendet:
import java.util.Scanner;
public class Solution {
public static void main(String[] args)
{
Scanner console = new Scanner(System.in);
String name = console.nextLine();
int age = console.nextInt();
System.out.println("Name: " + name);
System.out.println("Age: " + age);
}
}
Scanner
3. Ein Objekt erstellen
Die erste Frage ist, was ist diese Zeile Scanner console = new Scanner (System.in);
?
Diese Zeile mag verwirrend sein, aber Sie werden ständig ähnliche Dinge sehen. Deshalb halten wir es für wichtig zu erklären, was hier vor sich geht.
Erinnern Sie sich daran, wie wir normalerweise eine Variable mit Text erstellen:
String str = "text";
Zuerst schreiben wir den Typ der Variablen ( String
), dann ihren Namen ( str
) und schließlich schreiben wir nach dem Gleichheitszeichen den Wert.
Unser verwirrender Satz ist eigentlich derselbe:
Scanner console = new Scanner(System.in);
Scanner
Variablen
Alles links vom Gleichheitszeichen ist die Deklaration einer Variablen console
mit dem Namen Scanner
. s
Sie könnten es stattdessen oder scanner
oder sogar nennen keyboard
. Dann würde der Code so aussehen:
Scanner s = new Scanner(System.in);
String name = s.nextLine();
int age = s.nextInt();
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
int age = scanner.nextInt();
Scanner keyboard = new Scanner(System.in);
String name = keyboard.nextLine();
int age = keyboard.nextInt();
Ich denke, das macht alles viel klarer.
Der Code rechts vom Gleichheitszeichen ist jedoch etwas komplizierter. Ich beziehe mich jetzt auf new Scanner(System.in);
Das heißt, auch hier passiert nichts Übernatürliches.
In diesem Code teilen wir der Java-Maschine mit: Erstellen Sie ein neues Objekt (das new
Schlüsselwort) mit dem Typ Scanner
, und übergeben Sie das System.in
Objekt als Datenquelle für das neu erstellte Scanner
Objekt.
Nachdem wir diese ganze Zeile ausgeführt haben, haben wir eine Scanner
Variable mit dem Namen console
, die unser Programm zum Lesen von Daten von der Tastatur verwenden wird.
4. Liste der Methoden
Im obigen Beispiel Scanner
console
speichert unsere Variable einen Verweis auf ein Scanner
Objekt.
Um Methoden für ein Objekt aufzurufen, auf das eine Variable verweist, schreiben Sie nach dem Namen der Variablen einen Punkt, gefolgt vom Methodennamen und etwaigen Argumenten. Das allgemeine Erscheinungsbild des Befehls ist wie folgt:
variable.method(arguments);
Beispiele:
System.out.println("Hello");
System.out.println(1);
Wenn Sie nicht vorhaben, Argumente an eine Funktion zu übergeben, schreiben Sie einfach leere Klammern:
variable.method();
Beispiel:
System.out.println();
5. Konsoleneingabe
Wenn wir ein Objekt haben Scanner
, ist es einfach, Daten über die Tastatur abzurufen.
Um eine Zeile von der Tastatur zu lesen , benötigen Sie diesen Befehl:
String str = console.nextLine();
Wenn die Ausführung des Programms diese Zeile erreicht, wird es angehalten und darauf gewartet, dass der Benutzer Daten eingibt und die Eingabetaste drückt. Dann wird alles, was der Benutzer eingegeben hat, in der Variablen gespeichert str
.
Um eine Zahl von der Tastatur abzulesen , benötigen Sie diesen Befehl:
int number = console.nextInt();
Hier ist alles wie beim vorherigen Befehl. Wenn die Ausführung des Programms diese Zeile erreicht, wird es angehalten und darauf gewartet, dass der Benutzer Daten eingibt und die Eingabetaste drückt. Danach wird alles, was der Benutzer eingegeben hat, in eine Zahl umgewandelt und in der number
Variablen gespeichert.
Wenn der Benutzer Daten eingegeben hat, die nicht in eine Ganzzahl konvertiert werden können, generiert das Programm einen Fehler und wird beendet.
Um eine Bruchzahl über die Tastatur zu lesen , benötigen Sie diesen Befehl:
double number = console.nextDouble();
Diese Anweisung ist der mit der nextInt()
Methode sehr ähnlich, überprüft jedoch, ob die eingegebenen Daten in eine double
Zahl umgewandelt werden können.
Beispiel für ein Programm, das zwei Zahlen von der Tastatur liest und deren Summe auf dem Bildschirm anzeigt:
import java.util.Scanner;
public class Solution {
public static void main(String[] args)
{
Scanner console = new Scanner(System.in);
int a = console.nextInt();
int b = console.nextInt();
System.out.println(a + b);
}
}
Der Benutzer kann mehrere Zahlen in einer einzigen Zeile eingeben und diese durch Leerzeichen trennen: Die Methoden der Scanner
Klasse wissen, wie sie damit umgehen müssen. Allerdings liest das Programm die Zahlen erst, nachdem der Benutzer drückt Enter
.
6. Andere Methoden der Scanner
Klasse
Die oben genannten Methoden sind übrigens nicht alles, was die Scanner
Klasse zu bieten hat. Die vollständige Liste der Methoden sieht in etwa so aus:
Methode | Beschreibung |
---|---|
|
Liest Daten und wandelt sie in eine umbyte |
|
Liest Daten und wandelt sie in eine umshort |
|
Liest Daten und wandelt sie in eine umint |
|
Liest Daten und wandelt sie in eine umlong |
|
Liest Daten und wandelt sie in eine umfloat |
|
Liest Daten und wandelt sie in eine umdouble |
|
Liest Daten und wandelt sie in eine umboolean |
|
Liest ein „Token“. Token werden durch Leerzeichen oder Drücken der Eingabetaste getrennt |
|
Liest eine ganze Zeile |
Es gibt auch Methoden, mit denen Sie das nächste Token in der Eingabe überprüfen können, ohne es tatsächlich abzurufen (um zu wissen, welche Methode zum Lesen verwendet werden soll).
Methode | Beschreibung |
---|---|
|
Gibt es eine byte ? Kann die Eingabe in eine umgewandelt werden byte ? |
|
Gibt es eine short ? Kann die Eingabe in eine umgewandelt werden short ? |
|
Gibt es eine int ? Kann die Eingabe in eine umgewandelt werden int ? |
|
Gibt es eine long ? Kann die Eingabe in eine umgewandelt werden long ? |
|
Gibt es eine float ? Kann die Eingabe in eine umgewandelt werden float ? |
|
Gibt es eine double ? Kann die Eingabe in eine umgewandelt werden double ? |
|
Gibt es eine boolean ? Kann die Eingabe in eine umgewandelt werden boolean ? |
|
Gibt es einen weiteren Token? |
|
Gibt es eine andere Zeile? |
7. Daten aus einem String lesen
Wir haben bereits erwähnt, dass die Scanner
Klasse Daten aus verschiedenen Quellen lesen kann. Eine dieser Quellen ist eine Textfolge .
Es sieht ungefähr so aus:
String str = "text";
Scanner scanner = new Scanner(str);
Beim Erstellen des Scanner
Objekts übergeben wir den String str
anstelle des System.in
Objekts. Und jetzt scanner
liest das Objekt Daten aus der Zeichenfolge. Beispiel:
Programmcode: | Erläuterung: |
---|---|
|
// a == 10;
// b == 20;
Die Bildschirmausgabe wird sein: |
GO TO FULL VERSION