2012-07-01 42 views
0


誰能請解釋爲什麼下面的代碼的行爲出現異常:System.in.read()不阻止讀取更多輸入字符?

public class UserInputTest { 
    public static void main(String[] args) throws IOException { 
     int n=3; 
     char[] arr = new char[n]; 
     for (int i=0; i<n; i++) { 
      System.out.println(i+1 + " character :"); 
      arr[i] = ((char)System.in.read()); 
     } 

     System.out.println("You Entered : "); 
     for (int i=0; i<n; i++) { 
     System.out.println(arr[i]); 
     } 
    } 
} 

OUTPUT:
1個字符:
ü
2字符:
3字:
您輸入:
u

我期待它阻止用戶輸入值的三次。 有何評論?



謝謝
莫希特

+0

思路探索:1)打印出的「你輸入的字母」 *字符代碼*;怎麼了? 2)將'n'改爲6;怎麼了? – 2012-07-01 04:55:54

+0

@pst:不是重複的。當用戶鍵入它們時,OP不需要獲取這些字符。 –

回答

1

您鍵入的字符,然後按Enter鍵。第二次讀取返回回車。

+0

在這種情況下輸入字符的正確方法是什麼? – EMM

+1

@mohit:你已經從其中一個評論中得到了足夠的提示:你正在閱讀的另外兩個字符可能是\ r和\ n。只需跳過它們。或使用掃描儀。 –

+1

@mohit這不僅是正確的方法,而且是在控制檯輸入字符的唯一方法。問題是編寫你的程序來期待你實際得到的並正確處理它。 – EJP

1

輸入單個字符的正確方法是使用GUI(如Swing GUI)。您不能使用標準Java控制檯輸入單個字符。

您可以使用非標準的控制檯,例如JCurses,但不能使用標準的Java控制檯。

+0

看到這篇文章,如果認爲這是不可能的:http://stackoverflow.com/questions/1066318/how-to-read-a-single-char-from-the-console-in-java-as-the-user-類型 - 它 – Shahryar

+0

@Shahryar那麼,Swing UI繞過標準控制檯(和相關的行緩衝區)進行輸入,所以......該鏈接僅適用。然而,一個Swing應用程序也不是一個控制檯應用程序.. – 2012-07-01 04:58:22

+0

@Shahryar在另一個說明,這將是一個*好*問題關閉作爲副本。 – 2012-07-01 04:59:58

3

從控制檯讀取字符有上面提到的問題。所以,儘量讀作字符串:

public static void main(String args[]){ 


     int n=3; 
     char[] arr = new char[n]; 
     Scanner in = new Scanner(System.in); 
     for (int i=0; i<n; i++) { 
      System.out.println(i+1 + " character :"); 
      String s1 = in.nextLine(); 
      arr[i] = s1.charAt(0); 
     } 

     System.out.println("You Entered : "); 
     for (int i=0; i<n; i++) { 
     System.out.println(arr[i]); 
     } 
    } 
+0

我知道Scanner類。但我有興趣知道如何在我的問題中設置程序。 – EMM