java.util.Scanner hängt sich auf

Hallo,

Ich komme hier nicht klar. Den Code habe ich auf das Problem reduziert, deshalb ist er relativ sinnlos.

Zum Problem: Wenn ich in der Konsole zwei Zahlen, getrennt durch Leerzeichen eingebe, werden sie mir auch zurückgegeben. Wenn ich nur eine Zahl eingebe, hängt sich die Konsole auf bzw. terminiert einfach nicht.

Java:
// Scannt zwei Ganzzahlen ein und gibt sie aus.
public static void main(String[] args) {

    Scanner in;
    boolean exit = false;
    int[] values = new int[2];
    while (!exit) {
      in = new Scanner(System.in);
      System.out.print("Eingabe: ");
      if (in.hasNext()) {
        if (in.hasNextInt()) {
          values[0] = in.nextInt();
          if (in.hasNextInt()) {
            values[1] = in.nextInt();
            if (values[0] == 0 && values[1] == 0) {
              exit = true;
            } else {
              System.out.println("Sie haben " + values[0] + " "
                  + values[1] + " eingegeben.");
            }
          } else {
            System.out.println("Bitte geben Sie zwei ganze Zahlen ein.");
          }
        } else {
          System.out.println("Bitte geben Sie zwei ganze Zahlen ein.");
        }
      }
    }
  }
 

insane80

Aktives Mitglied
Hallo,

Du erwartest ja auch, dass der Benutzer zwei Zahlen eingibt.
Was sollte Deiner Ansicht nach sonst passieren? Das Programm wartet so lange, bis zwei Zahlen eingegeben wurden.
 
Eigentlich wollte ich, dass die Nachricht "Bitte geben Sie zwei ganze Zahlen ein." kommt, wenn nur eine Zahl eingegeben wurde und mit Enter bestätigt wurde.
Ich dachte wenn nichts da steht, dann ist hasNextInt() == false. Und somit müsste es ja zum else springen. Nichts ist ja wohl kein Int!??? Oder doch?
 

Xeonkryptos

Bekanntes Mitglied
Nein, aber die Methode blockiert solange, bis eine Eingabe erfolgt. Erfolgt keine weitere Eingabe, dann blockt das Programm. Du müsstest irgendwie ein TimeOut da reinbauen, damit du es dann, wenn es möglich ist, an der Stelle einfach das beendest.
 
Nein, aber die Methode blockiert solange, bis eine Eingabe erfolgt. Erfolgt keine weitere Eingabe, dann blockt das Programm. Du müsstest irgendwie ein TimeOut da reinbauen, damit du es dann, wenn es möglich ist, an der Stelle einfach das beendest.

Dein Statement hat mich jetzt auf die richtige Richtung geleitet, nachdem ich schon ganz genervt war, weil ich keine Lösung gefunden hatte. Tatsächlich blockiert auch die hasNextInt() / hasNext() - Methode. Dabei müsste man eigentlich meinen, dass die dazu da sei um zu schauen, ob es blockieren wird. Leider kann man den System.in- Stream nicht schließen.
Momentan macht es aus meiner Sicht den Anschein, dass der Scanner einfach nicht für System.in geeignet ist. Um ihn anzupassen (wenn das überhaupt möglich ist) müsste man wohl einen deutlich unschöneren Code erzeugen als wenn man gleich BufferedReader verwendet. Somit verwende ich vorerst für System.in wieder die alte Lösung.
Ich werde den Thread aber noch nicht auf gelöst setzen, weil ich die Hoffnung habe, dass doch irgendwann jemand einen Einfall hat, wie man das schön lösen kann, sodass sich der Scanner lohnt, denn seine Möglichkeiten sind für Fehlerbehandlung eigentlich sehr viel versprechend und würden vergleichsweise eine Menge Code sparen.
 
... und es geht doch...

Man benutzt zwei Scanner. Der erste liest die ganze Zeile und der zweite zerlegt sie:

Java:
  // Scannt zwei Ganzzahlen ein und gibt sie aus.
  public static void main(String[] args) {

    Scanner in = new Scanner(System.in);
    Scanner parseIn;
    boolean exit = false;
    int[] values = new int[2];
    while (!exit) {
      in = new Scanner(System.in);
      System.out.print("Eingabe: ");
      parseIn = new Scanner(in.nextLine());
      if (parseIn.hasNextInt()) {
        values[0] = parseIn.nextInt();
        if (parseIn.hasNextInt()) {
          values[1] = parseIn.nextInt();
          if (values[0] == 0 && values[1] == 0) {
            exit = true;
          } else {
            System.out.println("Sie haben " + values[0] + " " + values[1]
                + " eingegeben.");
          }
        } else {
          System.out.println("Bitte geben Sie zwei ganze Zahlen ein.");
        }
      } else {
        System.out.println("Bitte geben Sie zwei ganze Zahlen ein.");
      }
    }
  }
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Erste Schritte java.util.Scanner: Beliebig langen Text per Paste in Console eingeben ? Java Basics - Anfänger-Themen 14
N java.util.InputMismatchException Fehler Java Scanner Java Basics - Anfänger-Themen 5
M java.util.scanner Fehler Java Basics - Anfänger-Themen 5
W Erste Schritte import java.util.scanner funktioniert nicht Java Basics - Anfänger-Themen 2
P Variablen Abfangen von eingaben per java.util.Scanner und weiter Verarbeitung Java Basics - Anfänger-Themen 7
S Compiler-Fehler Scanner java.util NoSuchElementExeption Java Basics - Anfänger-Themen 8
F java.util.scanner wird übersprungen Java Basics - Anfänger-Themen 9
Luk10 Java.util.Scanner Java Basics - Anfänger-Themen 11
H ArrayList über java.util.Scanner füllen Java Basics - Anfänger-Themen 5
T import java.util.scanner cannot be resolved Java Basics - Anfänger-Themen 19
J Eclipse und printf und import util.java.scanner; Java Basics - Anfänger-Themen 4
T Möchte Charwert 23C° mit java.util.Scanner einlesen macht Pr Java Basics - Anfänger-Themen 2
M java.util.Scanner kann nicht aufgelöst werden - warum nicht? Java Basics - Anfänger-Themen 4
K Keine weitere (java.util.)Scanner Eingabemöglichkeit? Java Basics - Anfänger-Themen 5
A wie implementiere ich java.util.Scanner? Java Basics - Anfänger-Themen 12
"java.util.HashMap.get(Object)" is null Java Basics - Anfänger-Themen 10
BATMAN_2008 Jackson adding additional fields to JSON throws java.util.concurrent.CompletionException: Java Basics - Anfänger-Themen 2
R java.util.Set, CASE_INSENSITIVE_ORDER Java Basics - Anfänger-Themen 6
M Exception in thread "main" java.util.NoSuchElementException Java Basics - Anfänger-Themen 2
C java.util Timer läuft zu langsam? Java Basics - Anfänger-Themen 1
B Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException Java Basics - Anfänger-Themen 8
L Zufälliges Objekt aus der ArraylList ohne java.util.Random Java Basics - Anfänger-Themen 56
A Java.util.Arrays Java Basics - Anfänger-Themen 15
F java.util.ArrayList Java Basics - Anfänger-Themen 3
B java.util.Date noch zeitgemäß? Java Basics - Anfänger-Themen 6
B java.util.Date berechnen Java Basics - Anfänger-Themen 11
Meeresgott OOP Richtig mit java.util.Property umgehen Java Basics - Anfänger-Themen 22
N java.util.Random - Zwei Zahlen mit festgesetzter Wahrscheinlichkeit? Java Basics - Anfänger-Themen 15
A Vererbungshierachie und java.util.Date Java Basics - Anfänger-Themen 31
I google java-diff-util - Patch abspeichern Java Basics - Anfänger-Themen 1
G Interface java.util.Comparator: Wieso muss nur die Methode compare() implementiert werden Java Basics - Anfänger-Themen 2
H Repräsentation von DateTime (Joda) in Java Util Date überführen Java Basics - Anfänger-Themen 3
D java.util.NoSuchElementException: No line found Java Basics - Anfänger-Themen 11
D Lesen aus Datei (java.util.NoSuchElementException) Java Basics - Anfänger-Themen 22
W Methoden Rückgabedatentyp java.util.Map<java.lang.String,? extends ...> Java Basics - Anfänger-Themen 4
B ThreadPoolExecutor - import java.util.concurrent Java Basics - Anfänger-Themen 2
R java.util.Random Java Basics - Anfänger-Themen 8
S Methoden Sortieren: java.util.Arrays.useLegacyMergeSort Java Basics - Anfänger-Themen 4
E Klassen java.util.ArrayList<E> als Generics Java Basics - Anfänger-Themen 16
D java.util.ResourceBundle - exception Java Basics - Anfänger-Themen 4
M Datentypen java.util.Arrays$ArrayList cannot be cast to [Ljava.lang.String; Java Basics - Anfänger-Themen 11
S Unterschied java.util.prefs / java.util.Properties Java Basics - Anfänger-Themen 3
M java.util.ArrayList to java.sql.Array Java Basics - Anfänger-Themen 4
D java.util.Currency Java Basics - Anfänger-Themen 2
T java.util.Date Java Basics - Anfänger-Themen 5
J java.util.format => mit String? Java Basics - Anfänger-Themen 2
N java.util.Random Java Basics - Anfänger-Themen 6
N verständnisfrage java.util.Calendar Java Basics - Anfänger-Themen 4
P ArrayList<E> in package java.util Java Basics - Anfänger-Themen 4
N java.util.Arrays.sort Warum sind Leerzeichen vor alphabetischen Zeichen sortiert? Java Basics - Anfänger-Themen 12
K java.util.ConcurrentModificationException problem in der Logik? Quaxli-Tutorial Java Basics - Anfänger-Themen 9
D java.util.Currency.getInstance exception mit brit. Pfund Java Basics - Anfänger-Themen 4
M Kann mir bitte jemand "java.util.ArrayList" erklären? Java Basics - Anfänger-Themen 5
V java.util.Stack Java Basics - Anfänger-Themen 9
J Java.Util.Properties wrapper class (Review Request) Java Basics - Anfänger-Themen 2
S BITTE UM HILFE HASHTABLE/import java.util.Hashtable in Ecplipse Java Basics - Anfänger-Themen 12
G DateFormat - Datumsformat java.util.Locale interpretieren Java Basics - Anfänger-Themen 2
? java.util.Properties Wert von key mehrfach vorhanden Java Basics - Anfänger-Themen 13
E java.util.ConcurrentModificationException Problem Java Basics - Anfänger-Themen 5
F java.util.ConcurrentModificationException Java Basics - Anfänger-Themen 8
Q java.util.loggging neue datei erstellen Java Basics - Anfänger-Themen 3
L Exception in thread "main" java.util.NoSuchElement Java Basics - Anfänger-Themen 4
hedges Würfelwurf mit java.util.Random ohne 0 Java Basics - Anfänger-Themen 6
W Java.util.Map in Bean wandeln Java Basics - Anfänger-Themen 2
M java.util.Timer und geplante Abarbeitung Java Basics - Anfänger-Themen 2
U java.util.Date to java.sql.Date Java Basics - Anfänger-Themen 2
K Wer kann mir java.util.Hastable erklären. Java Basics - Anfänger-Themen 3
K Probleme mit java.util.hashtable Java Basics - Anfänger-Themen 10
K Zipfile erstellen mit java.util.zip.* Java Basics - Anfänger-Themen 2
G java.util.LinkedList: Doppelte Elemente vermeiden Java Basics - Anfänger-Themen 5
K Prob mit java.util.regex.matches-String wird nicht erkannt? Java Basics - Anfänger-Themen 9
K java.util.Calendar und Objekt Java Basics - Anfänger-Themen 7
M Seltsames java.util.Date Problem Java Basics - Anfänger-Themen 6
RaoulDuke java.util.Date parsen Java Basics - Anfänger-Themen 5
M Source Code von java.util.SubList Java Basics - Anfänger-Themen 2
ff java.util.date Java Basics - Anfänger-Themen 2
O reguläre Ausdrücke bei java.util.regex.Pattern Java Basics - Anfänger-Themen 4
D Mit java.util.Arrays.sort die negativen Zahlen hinten Java Basics - Anfänger-Themen 4
C java.util.Timer und wait() oder so was Java Basics - Anfänger-Themen 3
G Leere java.util.List erzeugen Java Basics - Anfänger-Themen 2
S java.awt.List vs. java.util.List Java Basics - Anfänger-Themen 2
D dumme Frage! (was heist 'import java.util.*;' ?) Java Basics - Anfänger-Themen 3
I Push Nachrichten von JAVA EE App an Mobile App Java Basics - Anfänger-Themen 3
H .java Dateien in Eclipse einbinden und ausführen Java Basics - Anfänger-Themen 1
onlyxlia Schlüsselworte Was meint man mit "einen Typ" in Java erstellen? Java Basics - Anfänger-Themen 2
O Java Kara geschweifte Klammern Java Basics - Anfänger-Themen 2
richis-fragen Mausrad logitech kann links und rechts klick wie in java abragen. Java Basics - Anfänger-Themen 15
XWing Java Klssenproblem Java Basics - Anfänger-Themen 4
R Umgebungsvariable java -cp gibt immer Java-Hilfe... Java Basics - Anfänger-Themen 3
farbenlos Csv Datei in Java einlesen Java Basics - Anfänger-Themen 18
F TableModelListener: java.lang.ArrayIndexOutOfBoundsException: 132 Java Basics - Anfänger-Themen 3
G Java 8 - Support-Ende Java Basics - Anfänger-Themen 7
T Java Weihnachtsbaum + Rahmen Java Basics - Anfänger-Themen 1
N Will mit Java anfangen Java Basics - Anfänger-Themen 13
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
M Java Iterator Verständnisfrage Java Basics - Anfänger-Themen 6
M Java Mail Programm Java Basics - Anfänger-Themen 4
Sniper1000 Java 391 für Windows Java Basics - Anfänger-Themen 37
J Java long- in int-Variable umwandeln Java Basics - Anfänger-Themen 6
JaZuDemNo Java im Studium Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben