2017-03-05 4 views
0

Mein Problem hängt damit zusammen, mehrere Benutzereingabezeichenfolgen unter Verwendung von Scanner unter System.in abzurufen, um ein Benutzername/Kennwort-Tupel abzurufen und das Tupel in einem String-Array zu speichern.Ergreifung mehrerer Zeichenfolgeneingaben von System.in mit Hilfe des Scanners

ähnliche Anfrage: Reading multiple Scanner inputs

sie jedoch nicht verwenden try/catch und ihr Code scheint zu funktionieren.

Wenn mein Code ausgeführt wird, erhalte ich eine java.util.NoSuchElementException in Richtung der Linie zeigt: login[1] = input.nextLine();

public void getPassword() throws Exception { 
     /* Create a string array to hold username and password */ 
     String[] login = {"a", "b"}; 
     System.out.println("Username:\n"); 
     try (Scanner input = new Scanner(System.in)) { 
      login[0] = input.nextLine(); 
     } catch (NoSuchElementException e) { 
      e.printStackTrace(); 
     } 
     System.out.println("Password:\n"); 
     try (Scanner input = new Scanner(System.in)) { 
      login[1] = input.nextLine(); 
     } catch (NoSuchElementException e) { 
      e.printStackTrace(); 
     } 
     System.out.println("username: " + login[0] + "\npassword: " + login[1]); 
    } 

Was könnte das Problem sein?

+0

Erstellen Sie nicht jedes Mal einen 'Scanner', wenn Sie Eingaben lesen möchten. Erstellen Sie es einmal. – Jeremy

+0

Sollte ich den zweiten Versuch entfernen und fangen und alles in einen Block stecken? – Mir

+1

auch, verwenden Sie hasNextLine(). das sollte Ihre Ausnahme verhindern, aber die Art, wie Sie die Scanner verwenden, ist nicht der richtige Weg. –

Antwort

0

Sie müssen NoSuchElementException nicht fangen, wenn Sie zuerst eine der Methoden has*() verwenden.

Zum Beispiel gibt der folgende Code die zwei Eingaben an der Konsole wieder.

Scanner scan = new Scanner(System.in); 
if (scan.hasNextLine()) { 
    System.out.println(scan.nextLine()); 
} 
if (scan.hasNextLine()) { 
    System.out.println(scan.nextLine()); 
} 
+1

Danke! Das hat es für mich getan. Ich entfernte den try/catch-Block und die "throws Exception" und ersetzte mit ähnlichen Zeilen oben. Ich habe die Verwendung der hasNextLine() Methode nicht verstanden, aber ich habe nach der Dokumentation gesucht und jetzt ist es klar. Vielen Dank! – Mir

Verwandte Themen