Scanner: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
(2 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 5: | Zeile 5: | ||
Für sämtliche Ressourcen dieser Art ist es wichtig, diese nach der Verwendung wieder zu schließen, damit zum Beispiel andere Programme auch auf die Datei zugreifen können. | Für sämtliche Ressourcen dieser Art ist es wichtig, diese nach der Verwendung wieder zu schließen, damit zum Beispiel andere Programme auch auf die Datei zugreifen können. | ||
Dafür gibt es zwei Möglichkeiten: | Dafür gibt es zwei Möglichkeiten: | ||
# <syntaxhighlight inline lang="Java">Scanner::close()</syntaxhighlight>: <br> | # <syntaxhighlight inline lang="Java">Scanner::close()</syntaxhighlight>: <br>Methode der Scanner-Klasse die den zugrundeliegenden InputStream schließt. | ||
# try-with-ressources: <br>Ein try-with-ressources Block ähnelt einem try-catch-Block. Am Ende des Blocks wird die angegebene Ressource automatisch geschlossen und es wird von dem Compiler verhindert, dass der geschlossene Scanner außerhalb des Blocks verwendet wird. | # try-with-ressources: <br>Ein try-with-ressources Block ähnelt einem try-catch-Block. Am Ende des Blocks wird die angegebene Ressource automatisch geschlossen und es wird von dem Compiler verhindert, dass der geschlossene Scanner außerhalb des Blocks verwendet wird. | ||
<syntaxhighlight lang="Java"> | <syntaxhighlight lang="Java"> | ||
Zeile 47: | Zeile 47: | ||
public static void main(String[] args) { | public static void main(String[] args) { | ||
Scanner scanner = new Scanner(System.in); | Scanner scanner = new Scanner(System.in); | ||
while ( | while (scanner.hasNext()) { | ||
String line = scanner.nextLine(); | String line = scanner.nextLine(); | ||
// do something with line | // do something with line |
Aktuelle Version vom 17. Oktober 2024, 11:12 Uhr
🚧 | Diese Seite befindet sich in Bearbeitung | 🚧 |
🤓 | Diese Seite ist eine Bewertungsrichtlinie, die ab Blatt 1 annotiert und ab Blatt 2 abgezogen wird. | 🤓 |
Beschreibung
Wir benutzen den Scanner des java.util Paketes um Eingaben von einem beliebigen InputStream zu lesen. Insbesondere wollen wir in diesem Übungsbetrieb den InputStream des System.in lesen um Benutzereingaben der Kommandozeile einzulesen. Abgesehen davon, können auch diverse andere InputStreams lesen, so zum Beispiel Dateien oder Netzwerkverkehr. Für sämtliche Ressourcen dieser Art ist es wichtig, diese nach der Verwendung wieder zu schließen, damit zum Beispiel andere Programme auch auf die Datei zugreifen können. Dafür gibt es zwei Möglichkeiten:
Scanner::close()
:
Methode der Scanner-Klasse die den zugrundeliegenden InputStream schließt.- try-with-ressources:
Ein try-with-ressources Block ähnelt einem try-catch-Block. Am Ende des Blocks wird die angegebene Ressource automatisch geschlossen und es wird von dem Compiler verhindert, dass der geschlossene Scanner außerhalb des Blocks verwendet wird.
try (Scanner scanner = new Scanner(System.in)) {
//...
String line = scanner.nextLine();
//...
}
Negativbeispiel
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
String line = scanner.nextLine();
// do something with the line
if (line.equals("quit")) {
break;
}
}
}
Der Scanner wird hier nicht geschlossen und blockiert dadurch den InputStream.
Positivbeispiel
public static void main(String[] args) {
try (Scanner scanner = new Scanner(System.in)) {
while (scanner.hasNext()) {
String line = scanner.nextLine();
// do something with line
if (line.equals("quit")) {
break;
}
}
}
}
Hier wird der Scanner durch einen try-with-ressources bereitgestellt und damit auch automatisch nach austreten des Blocks geschlossen. Alternativ kann auch folgendes geschrieben werden:
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
String line = scanner.nextLine();
// do something with line
if (line.equals("quit")) {
break;
}
}
scanner.close();
}
Diese Variante erfordert lediglich selbst daran zu denken, den Scanner nach beenden des Programms zu schließen.