Scanner - Problem
-
Was ist an dem folgende Code falsch? Ich hab vorher einen Scanner angelegt und diesen wieder geschlossen. Nun leg ich einen zweiten Scanner an, bekomme aber die Meldung "Exception in thread "main" java.util.NoSuchElementException". Warum:
try(Scanner in2 = new Scanner(System.in)) { System.out.print("Bitte Zahl-1 eingeben: "); a = in2.nextInt(); System.out.println("Bitte Zahl-2 eingeben: "); b = in2.nextInt(); summe = a + b; System.out.print(a + " + " + b + " = " + summe); } catch(InputMismatchException exc) { System.out.println("Sie haben eine ungültige Zahl eingegeben!"); }
Und sorry für den neuen Beitrag, war keine Absicht.
-
Ich habe den Code mal ausgefuehrt (ich nehme an a, b, summe sind int-Variabeln) und bei mir wurde keine Exception geworfen.
-
Hi,
Ja aber davor ist noch dieser Code:
Scanner in = null; /* ----------------------------------------- Erste Variante ------------------------------------------ */ // Zwei Ganzzahlen vom Benutzer einlesen try { in = new Scanner(System.in); System.out.print("Bitte Zahl-1 eingeben: "); a = in.nextInt(); System.out.print("Bitte Zahl-2 eingeben: "); b = in.nextInt(); summe = a + b; System.out.println(a + " + " + b + " = " + summe); } catch(InputMismatchException exc) { System.out.println("Sie haben eine ungültige Zahl eingegeben!"); } finally { // Egal ob der try-Block komplett ausgeführt werden konnte, oder ob ein Fehler aufgetreten ist, // Dieser finally-Block wird auf jeden Fall 100% ausgeführt. in.close(); // Um sicher überprüfen zu können, ob unser finally-Block auch ausgeführt wurde in = null; }
-
Ja, clever, du schließt ja auch den System-Eingabestrom und versuchst später daraus zu lesen.
-
Noch eine Bemerkung zu deinem finally. Du hast
finally { // Egal ob der try-Block komplett ausgeführt werden konnte, oder ob ein Fehler aufgetreten ist, // Dieser finally-Block wird auf jeden Fall 100% ausgeführt. in.close(); // Um sicher überprüfen zu können, ob unser finally-Block auch ausgeführt wurde in = null; }
Ich verstehe nicht was das
in = null;
dort zu suchen hat? Du musst nicht ueberpruefen, ob der finally Block ausgefuehrt wurde. Der finally Block wird (wie du im Kommentar weiter oben selber schreibst) immer ausgefuehrt.
Ich wuerde das aendern zu:
finally { if ( in != null ) in.close(); }
-
gastantwort schrieb:
Ja, clever, du schließt ja auch den System-Eingabestrom und versuchst später daraus zu lesen.
--> Ja aber ist das denn nicht wie bei Dateien, wo man die Datei einfach so oft auf und zumachen kann, wie man will?
lg
-
Wenn du einen Dateistream aufmachst und wieder schließt kannst du daraus auch nicht weiter lesen...
-
gastantwort schrieb:
Wenn du einen Dateistream aufmachst und wieder schließt kannst du daraus auch nicht weiter lesen...
Oben im Code hab ich aber den geschlossenen Stream mit "Scanner in2 = new Scanner.." nochmal geöffnet?
-
Poste doch mal ein minimales, ausfuehbares Beispiel, bei dem der Fehler auftritt.
-
Jeffson schrieb:
gastantwort schrieb:
Wenn du einen Dateistream aufmachst und wieder schließt kannst du daraus auch nicht weiter lesen...
Oben im Code hab ich aber den geschlossenen Stream mit "Scanner in2 = new Scanner.." nochmal geöffnet?
Nein du hast einen neuen Scanner erstellt, aber System.in ist zu...