2014-12-21 65 views
2

我想讀喜歡的用戶輸入:11 12 13 14 15 16Java的掃描儀 - 無法讀取用戶輸入

Scanner sc = new Scanner(System.in); 
    while(sc.hasNext()){ 
     System.out.println(sc.next()); 

    } 
    System.out.println("Test"); 

,但較新的熄滅而循環並打印「測試」的。 我怎麼讀取輸入?

+0

你迫切的輸入,經過進入? – FlyingPiMonster

+0

是的,我是..它打印出sc。下一步(),但只是停止,並沒有離開while循環打印測試 –

+2

你不會走出這個循環,沒有使用某個「終止」代碼字。 'System.in'總是要求更多的輸入,因此'sc.hasNext()'總是爲真。 – Tom

回答

1

您可以根據您是否要退出而斷開循環E.g.

public static void main(String[] args) { 
     Scanner sc = new Scanner(System.in); 
     while(sc.hasNext()){ 
      String next = sc.next(); 

      if (next.equals("q")) { //if user press q then break the loop 
       break; 
      } 
      System.out.println(next); 

     } 
     System.out.println("Test"); 
    } 
1

使用的API,如:

while(sc.hasNextInt()){ 
    int aba= sc.nextInt(); 
    if (aba == 0) {//or even non numeric value here would let this loop exit 
     break; 
    } 
} 

所以,你需要輸入0,甚至在其他的方式輸入非數值序來循環出來。 nextLine方法只會讀整行一次,然後你需要解析它,然後轉換爲整數,所以最好使用sc.nextInt,它將爲你完成工作。

+0

有兩件事:你的變量被稱爲'aba'而不是'abc':P。你可能會添加信息,任何非數字輸入也會終止循環。所以'0'的檢查可能不需要作爲終止條件。 – Tom

+0

@Tom謝謝,我修改了它。我同意輸入其他非數字值,但我認爲將新手與不必要的解釋混淆並不是個好主意。 – SMA

2

hasNext()工作原理是這樣的方法:

  • 如果它看到文件的末尾,則返回false;
  • 如果它看到另一個有效的非空白輸入,它將返回true;
  • 如果上述都不成立,它將等待用戶將要輸入的下一個輸入,直到他輸入爲止。

通常情況下,如果你使用Scanner的文件,這樣的循環將正常工作,因爲文件中有一個明確的結束,它通常不會停留在等待更多的輸入。

但是,當您使用控制檯輸入(System.in,未重定向)時,通常用戶不會發送文件結束信號。他只是按返回,所以,hasNext()坐在並等待,看看用戶是否會在下一行輸入更多的輸入,等等。

一般有兩種方式來處理這個:

  • 用戶有實際終止輸入。完成輸入你的號碼,然後按回車,您還需要發送結束文件中的順序,通常是CTRLdCTRLž

    如果你這樣做,你將無法再輸入該程序的任何輸入。

  • 該程序告訴用戶輸入一些特定的值,告訴它輸入結束。例如,字符串「完成」。當你這樣做,你必須將循環更改爲類似:

    String nextInput; 
    while(sc.hasNext() && ! (nextInput = sc.next()).equals("DONE")){ 
        System.out.println(nextInput); 
    }