2017-03-05 51 views
0

私の問題は、をSystem.inにして複数のユーザー入力文字列を取得し、文字列配列にタプルを格納することに関連しています。Scannerを使用してSystem.inから複数の文字列を取得する

同様の問い合わせ:Reading multiple Scanner inputs

しかし、彼らはキャッチ/しようと使用していないと、そのコードが動作しているようです。

私のコードを実行しているとき、私はラインの方を向いてjava.util.NoSuchElementExceptionを得る: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]); 
    } 

問題がある可能性がありますか?

+0

入力を読み取るたびに「スキャナ」を作成しないでください。それを一度作成してください。 – Jeremy

+0

2回目のtryとcatchを削除して、すべてを1つのブロックに入れてください。 – Mir

+1

また、hasNextLine()を使用してください。あなたの例外を防ぐはずですが、スキャナを使用する方法は適切な方法ではありません。 –

答えて

0

最初にhas*()のいずれかの方法を使用する場合は、NoSuchElementExceptionをキャッチする必要はありません。

たとえば、次のコードは2つの入力をコンソールにエコーします。

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

ありがとう!これは私のためにやった。私はtry/catchブロックと "例外スロー"を削除し、上記の同様の行に置き換えました。私はhasNextLine()メソッドの使用を理解していませんでしたが、私はドキュメントを参照して、今は明らかです。ありがとうございました! – Mir

関連する問題