2017-11-03 1 views
-2

Ich versuche, den Benutzer nach zwei Zahlen zu fragen. Ich möchte überprüfen, ob diese Eingaben tatsächlich Zahlen sind, aber der Code, den ich bisher habe, lässt mich keinen zweiten Wert eingeben, wenn die erste Eingabe eine Zeichenkette ist.Scanner liest nicht Eingabe in else Anweisung

So liest der Scanner nichts die else-Anweisung.

Wie könnte ich es funktionieren lassen?

import java.util.Scanner; 

public class calculations { 
    public static void main(String[] args) { 
     Scanner console = new Scanner(System.in); 
     System.out.print("Please enter your first name: "); 
     String fname = console.nextLine(); 
     System.out.print("Please enter your last name: "); 
     String lname = console.nextLine(); 
     System.out.print("Please enter your first number: "); 
     if (console.hasNextInt()) { 
      int number1 = console.nextInt(); 
      System.out.print("Please enter your second number: "); 
      if (console.hasNextInt()) { 
       int number2 = console.nextInt(); 
      } 
     } else 
      System.out.print("Please enter your second number: "); 
     if (console.hasNextInt()) { 
      int number2 = console.nextInt(); 
      // this part does not work 
     } 
    } 
} 
+2

Ihr 'else' Block enthält nur eine Druckanweisung. –

+1

Zu dem vorherigen Kommentar hinzufügen, sollte 'else' Bedingung in einem' {} 'Block helfen. – Eugene

+0

Ich habe das schon probiert. Leider hilft es nicht. Irgendwelche anderen Ideen? – kiaora

Antwort

1

Sie müssen nur console.nextLine(); nach Ihrer else Anweisung hinzufügen, weil die Scanner.hasNextInt Methode nicht Cursor über Ihre vorherige Eingabe bewegen (wenn es eine Zeichenfolge ist).

+1

Das OP ruft nie nextInt() auf. Und das Problem, auf das du dich beziehst, ist nicht darüber. Es geht darum, dass nextLine() eine leere Zeichenfolge liest, weil nextInt() das EOL nicht konsumiert. Der Aufruf von next() wäre die falsche Lösung für dieses Problem, aber dieses Problem tritt hier nicht auf. –

+0

@JB Nizet, Sie haben Recht, das Problem besteht nicht darin, EOL zu verbrauchen. Trotzdem scheint es eine gültige Lösung zu sein, den Cursor mit der next() -Methode zu bewegen, also habe ich die Antwort bearbeitet. Danke für das Aufzeigen! – Eugene

+1

Wo ist der Cursor, wenn die Antwort auf "Bitte geben Sie Ihre erste Nummer ein:" ist "Hallo Welt", und Sie rufen next() um den Cursor zu bewegen? Wo sollte es sein? –

Verwandte Themen