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.outObjekt 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.inuns 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. ScannerKlasse

Die ScannerKlasse (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.inObjekt 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 ScannerObjekts würde etwa so aussehen:

Code Erläuterung
Scanner console = new Scanner(System.in);
String name = console.nextLine();
int age = console.nextInt();
Wir erstellen ein ScannerObjekt.
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 ScannerKlasse 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);
   }
}

Scanner3. 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";
Deklarieren und Initialisieren einer String-Variablen

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);
Deklarieren und Initialisieren einer ScannerVariablen

Alles links vom Gleichheitszeichen ist die Deklaration einer Variablen consolemit dem Namen Scanner. s Sie könnten es stattdessen oder scanneroder 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 newSchlüsselwort) mit dem Typ Scanner , und übergeben Sie das System.inObjekt als Datenquelle für das neu erstellte ScannerObjekt.

Nachdem wir diese ganze Zeile ausgeführt haben, haben wir eine ScannerVariable mit dem Namen console , die unser Programm zum Lesen von Daten von der Tastatur verwenden wird.


4. Liste der Methoden

Im obigen Beispiel Scanner consolespeichert unsere Variable einen Verweis auf ein ScannerObjekt.

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);
Aufrufen einer Methode für ein Objekt, auf das von einer Variablen verwiesen wird

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();
Aufrufen einer Methode ohne Übergabe von Argumenten

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 numberVariablen 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 doubleZahl 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);
   }
}
Notiz

Der Benutzer kann mehrere Zahlen in einer einzigen Zeile eingeben und diese durch Leerzeichen trennen: Die Methoden der ScannerKlasse wissen, wie sie damit umgehen müssen. Allerdings liest das Programm die Zahlen erst, nachdem der Benutzer drückt Enter.



6. Andere Methoden der ScannerKlasse

Die oben genannten Methoden sind übrigens nicht alles, was die ScannerKlasse zu bieten hat. Die vollständige Liste der Methoden sieht in etwa so aus:

Methode Beschreibung
nextByte()
Liest Daten und wandelt sie in eine umbyte
nextShort()
Liest Daten und wandelt sie in eine umshort
nextInt()
Liest Daten und wandelt sie in eine umint
nextLong()
Liest Daten und wandelt sie in eine umlong
nextFloat()
Liest Daten und wandelt sie in eine umfloat
nextDouble()
Liest Daten und wandelt sie in eine umdouble
nextBoolean()
Liest Daten und wandelt sie in eine umboolean
next()
Liest ein „Token“. Token werden durch Leerzeichen oder Drücken der Eingabetaste getrennt
nextLine()
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
hasNextByte()
Gibt es eine byte? Kann die Eingabe in eine umgewandelt werden byte?
hasNextShort()
Gibt es eine short? Kann die Eingabe in eine umgewandelt werden short?
hasNextInt()
Gibt es eine int? Kann die Eingabe in eine umgewandelt werden int?
hasNextLong()
Gibt es eine long? Kann die Eingabe in eine umgewandelt werden long?
hasNextFloat()
Gibt es eine float? Kann die Eingabe in eine umgewandelt werden float?
hasNextDouble()
Gibt es eine double? Kann die Eingabe in eine umgewandelt werden double?
hasNextBoolean()
Gibt es eine boolean? Kann die Eingabe in eine umgewandelt werden boolean?
hasNext()
Gibt es einen weiteren Token?
hasNextLine()
Gibt es eine andere Zeile?

7. Daten aus einem String lesen

Wir haben bereits erwähnt, dass die ScannerKlasse 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 ScannerObjekts übergeben wir den String stranstelle des System.inObjekts. Und jetzt scannerliest das Objekt Daten aus der Zeichenfolge. Beispiel:

Programmcode: Erläuterung:
import java.util.Scanner;
public class Solution {
   public static void main(String[] args)
   {
      String str = "10 20 40 60";
      Scanner scanner = new Scanner(str);
      int a = scanner.nextInt();
      int b = scanner.nextInt();

      System.out.println(a + b);
   }
}


// a == 10; 
// b == 20; 
Die Bildschirmausgabe wird sein:30