Scanner: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
| (9 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
{{Bewertungsrichtlinie | {{CategoryBlock | ||
| | |Baustelle=Ja | ||
| | |Java Grundlagen=Ja | ||
| | |Organisation=Nein | ||
|Programmierstil=Nein | |||
|Bewertungsrichtlinie=Nein | |||
|blattAnnotation=1 | |||
|blattAbzug=1 | |||
}} | |||
{{Inhaltsblock | |||
|vorher=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: | |||
# <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. | |||
|Beispiel=try (Scanner scanner = new Scanner(System.in)) { | |||
//... | |||
String line = scanner.nextLine(); | |||
//... | |||
} | |||
}} | |||
{{Inhaltsblock | |||
|color=red | |||
|vorher=Negativbeispiel: | |||
|Beispiel=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; | |||
} | |||
} | |||
} | |||
|nachher=Der Scanner wird hier nicht geschlossen und blockiert dadurch den InputStream. | |||
}} | |||
{{Inhaltsblock | |||
|color=green | |||
|vorher=Positivbeispiel: | |||
|Beispiel=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; | |||
} | |||
} | |||
} | |||
} | |||
|beispielname=ScannerBad | |||
|nachher=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: | |||
}} | |||
{{Inhaltsblock | |||
|color=green | |||
|Beispiel=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(); | |||
} | |||
|beispielname=ScannerGood | |||
|nachher=Diese Variante erfordert lediglich selbst daran zu denken, den Scanner nach beenden des Programms zu schließen. | |||
}} | }} | ||
Aktuelle Version vom 14. Oktober 2025, 08:26 Uhr
| 🚧 | Diese Seite befindet sich in Bearbeitung | 🚧 |
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;
}
}
}
Positivbeispiel:
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:
Diese Variante erfordert lediglich selbst daran zu denken, den Scanner nach beenden des Programms zu schließen.