Scanner: Unterschied zwischen den Versionen

Aus Programmieren-Wiki
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
(3 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
{{Bewertungsrichtlinie
{{CategoryBlock
|baustelle=Ja
|Baustelle=Ja
|blatt=1
|Java Grundlagen=Ja
|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.
|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.
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>Wie oben beschrieben, schließt close() den zugrundeliegenden InputStream.
# <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">
|Beispiel=try (Scanner scanner = new Scanner(System.in)) {
try (Scanner scanner = new Scanner(System.in)) {
   //...
   //...
   String line = scanner.nextLine();
   String line = scanner.nextLine();
   //...
   //...
}
}
</syntaxhighlight>
}}
|schweregrad=leicht
{{Inhaltsblock
|negativ=<syntaxhighlight lang="Java">
|color=red
public static void main(String[] args) {
|vorher=Negativbeispiel:
|Beispiel=public static void main(String[] args) {
     Scanner scanner = new Scanner(System.in);
     Scanner scanner = new Scanner(System.in);
     while (scanner.hasNext()) {
     while (scanner.hasNext()) {
Zeile 26: Zeile 33:
     }
     }
}
}
</syntaxhighlight>
|nachher=Der Scanner wird hier nicht geschlossen und blockiert dadurch den InputStream.
 
}}
Der Scanner wird hier nicht geschlossen und blockiert dadurch den InputStream.
{{Inhaltsblock
|positiv=<syntaxhighlight lang="Java">
|color=green
public static void main(String[] args) {
|vorher=Positivbeispiel:
|Beispiel=public static void main(String[] args) {
     try (Scanner scanner = new Scanner(System.in)) {
     try (Scanner scanner = new Scanner(System.in)) {
         while (scanner.hasNext()) {
         while (scanner.hasNext()) {
Zeile 41: Zeile 49:
     }
     }
}
}
</syntaxhighlight>
|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:
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:
}}
<syntaxhighlight lang="Java">
{{Inhaltsblock
public static void main(String[] args) {
|color=green
|Beispiel=public static void main(String[] args) {
     Scanner scanner = new Scanner(System.in);
     Scanner scanner = new Scanner(System.in);
     while (scanner.hasNext()) {
     while (scanner.hasNext()) {
Zeile 56: Zeile 65:
     scanner.close();
     scanner.close();
}
}
</syntaxhighlight>
|beispielname=ScannerGood
 
|nachher=Diese Variante erfordert lediglich selbst daran zu denken, den Scanner nach beenden des Programms zu schließen.
Diese Variante erfordert lediglich selbst daran zu denken, den Scanner nach beenden des Programms zu schließen.
|kategorie=Programmierstil
|weiterlesen=Nein
}}
}}

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:

  1. Scanner::close():
    Methode der Scanner-Klasse die den zugrundeliegenden InputStream schließt.
  2. 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.