2017-04-18 2 views
0

Ich habe ein kleines Problem mit meinem Java-Snippet. Ich möchte eine doppelte oder int und eine Fehlermeldung ausgeben und mit jeder anderen Eingabe neu loopen. Nun, ich bin ziemlich neu in Java, also ist dies möglicherweise nicht der effizienteste Weg, um dies zu erreichen, aber was können Sie tun?Java, zweimal mit der gleichen Eingabe Schleife

In jedem Fall ist das Problem, dass ich, wenn ich eine ungültige Eingabe eingeben, meine Fehlermeldung zweimal vor dem Akzeptieren einer neuen Eingabe druckt. Ich würde einfach sc.next() verwenden, aber ich möchte keine andere ungültige Eingabe akzeptieren, wenn ein Benutzer eine Zeichenfolge mit Leerzeichen eingibt.

Es hat offensichtliche Kommentare, weil das ist, was mein Professor will, so tue ich es

mein Code-Schnipsel hier:

System.out.println("Enter hours worked: "); 
        while(hourFinisher == false) 
        { 
         //avoids type mismatch by allowing double or int to be entered 
         if(sc.hasNextDouble()) 
         { 
          hours = sc.nextDouble(); 
          isDouble = true; 
          hourFinisher = true; 
         } 
         else if(sc.hasNextInt()) 
         { 
          intHours = sc.nextInt(); 
          isDouble = false; 
          hourFinisher = true; 
         } 
         //in the case of a non-double or int, prints an error message and accepts a new input 
         else 
         { 
          System.out.println("Invalid Input! Please enter valid input."); 
          sc.nextLine(); 
         } 

Um klar zu sein, was ich bekomme, wenn ich eingegeben werden, zum Beispiel 'a', ist Invalid Input! Please enter valid input. zweimal.

Ich möchte das nicht zweimal drucken; es ist überflüssig. Irgendwelche Hinweise werden geschätzt!

Danke!

+1

Mögliche Duplikat [Scanner wird das Überspringen nextline() übernächsten() verwendet, nextInt() oder andere nextFoo() Methoden] (http://stackoverflow.com/questions/13102045/scanner-is-skipping-nextline-after-using-next-nextint-or-other-nextfoo) – azurefrog

Antwort

0

Verwenden sc.nextLine(); nach anderen Eingänge (dh nextInt(), nextDouble(). Der Eingang wird nicht automatisch, nachdem diese übernimmt.

Verwandte Themen