2014-11-06 57 views
4

我遇到這個問題很多。當我多次使用掃描儀時,它不會從用戶那裏獲得輸入。Java多次使用掃描器

Scanner scan = new Scanner(System.in); 

     System.out.println("1---"); 

     int try1 = scan.nextInt(); 

     System.out.println("2---"); 

     int try2 = scan.nextInt(); 

     System.out.println("3---"); 

     String try3 = scan.nextLine(); 

     System.out.println("4---"); 

     String try4 = scan.nextLine(); 

當運行該代碼,導致它:

1 ---

2 ---

3 ---

4 ---

aa

正如您所看到的,它跳過了第3個輸入。爲什麼發生這種情況?我通過使用新的掃描儀解決了這個問題,有時我有5-6個不同的掃描儀,看起來很複雜。 另一個問題是:有一個錯誤「資源泄漏:掃描從不關閉」。我很困惑。

+1

您鍵入3「資源泄漏掃描永遠不會關閉」 ,然後是2,然後是1,然後是。 'int'是321。仍在等待處理。然後第一個'nextLine'調用讀取,直到下一個,但之前您已經輸入了,所以它返回該行(不包含任何內容)。考慮如果您鍵入「123 456 abc def 」 – immibis 2014-11-06 12:27:03

+0

會發生什麼情況,警告「資源泄漏:掃描永遠不會關閉」。您需要關閉掃描。 scanner.close(); – 2014-11-06 12:27:54

+0

[Java - Scanner - 跳過我最後一個nextLine()請求]的可能重複(http://stackoverflow.com/questions/24770531/java-scanner-skips-over-my-last-nextline-request) – 2014-11-06 12:39:48

回答

2

下次使用API​​比nextLine而當你做下一步,你預先輸入,它會生成數字+ \ n和nextInt只會採取整數,並不會採取\ n反過來傳遞給下一個輸入,即try3這就是爲什麼它被跳過。

 Scanner scan = new Scanner(System.in); 

    System.out.println("1---"); 

    int try1 = scan.nextInt(); 

    System.out.println("2---"); 

    int try2 = scan.nextInt(); 

    System.out.println("3---"); 

    String try3 = scan.next(); 

    System.out.println("4---"); 

    String try4 = scan.next(); 
6

的問題是,用scanner.nextInt()你只當你按下回車一個整數值,而不是整個行,你不消耗換行符(\n)追加到該行。

然後,當您使用scanner.nextLine()處理閱讀時,將消耗換行符(\n)和上一行,並且不讀取要讀取的行。爲了強制它讀取它,您必須添加額外的input.nextLine()聲明。

System.out.println("2---"); 
int try2 = scan.nextInt(); 
System.out.println("3---"); 
scan.nextLine(); //<-- fake statement, to move the cursor on the next line 
String try3 = scan.nextLine(); 

不相關的問題,你必須關閉Scanner,工作完成後,否則編譯器警告抱怨:

scan.close(); 
0

那麼,對於第一個問題使用

scan.next()

insted的使用

scan.nextLine的();

對於我建議使用try第二個問題,假設您需要關閉您的掃描爲你的編譯器是警告:

Scanner scanner= null; 
    try { 
    scanner= new Scanner(System.in); 

    } 
    finally { 
    if(scanner!=null) 
    scanner.close(); 
}