2017-11-18 3 views
1
public class Test1 { 
    public static void main(String[] args) { 
     Scanner sc = new Scanner(System.in); 

     while(sc.hasNext()) { 
      System.out.println("First name: "); 
      String fname =sc.next(); 
      System.out.print("Last name: "); 
      Lname = sc.next(); 

     } 


} 

Ich bin nur ein Anfänger in Java, hoffe jemand kann mir bitte helfen. Ignoriere die letzte Druckzeile, die ich benutzt habe, damit ich verstehen kann, was genau ich ausgeben kann. ohne die while-Schleife bekomme ich die richtige Ausgabe erwarte ich den Code, aber sobald ich die while hinzufügen (sc.hasnext)
ein Scanner kommt vor dem ersten Namen und ignoriert den Scanner, der den ersten Namen eingegeben hat. Überspringt der hasNext() Scanner?while (sc.hasNext) loop java

+0

Sie soo viel für diejenigen, danken, die mein Problem beantwortet ... aus persönlichen Gründen entfernt ich einige Teile des Codes ... –

Antwort

3

Aus der Dokumentation von Scanner.hasNext():

Gibt true zurück, wenn der Scanner einen anderen Token in seinem Eingang hat. Diese Methode blockiert möglicherweise, während auf die Eingabe zum Scannen gewartet wird. Der Scanner geht an keiner Eingabe vorbei.

Dies bedeutet, dass die While-Schleife, die Sie hinzufügen, warten wird, bis Sie etwas schreiben. Nachdem Sie etwas geschrieben haben, wird es für den Vornamen gelesen und es wird fortgesetzt. Wenn Sie alle Daten füllen, wird es wieder warten, um etwas zu schreiben und grundsätzlich für immer zu loopen.

Sie benötigen eine andere Bedingung für die Schleife. Zum Beispiel können Sie tun, während und nach dem letzten Daten geschrieben wird, können Sie den Benutzer zusätzliche Frage stellen, ob er etwas anderes hinzufügen möchte. ZB:

do { 
    // gather data 
    System.out.println("Continue ?"); 
    String c = scanner.next(); 
} while("yes".equals(c)) 
+1

'String c 'sollte vor der Schleife deklariert werden, wenn Sie verwenden möchten, es im Schleifenzustand. – Pshemo

+0

@vbuhlev danke ich habe die Idee –