2015-12-06 198 views
1

環路我寫了一個循環是這樣的:混淆在Java

for(int i = 0; (char) System.in.read() != 's'; i++){ 
    System.out.print(i); 
} 

我預想的計劃,以確保印刷數字,直到我在鍵盤上輸入s。然而,每次我輸入一個字母時,我在命令提示符得到了three numbers

a 
012 
q 
345 

應該只有一個打印類型每個字母后的控制檯上的數字,但有三個。爲什麼?

+3

我假設你輸入一個字母后跟Enter鍵?您是否閱讀了換行符和回車符? – sstan

+0

你的問題不在for循環中,它與'System.in.read()'的行爲有關,它被緩衝並等待直到行尾。 –

+0

我實際上在控制檯中得到兩個數字。 –

回答

3

正如幾位評論者所說的,問題不在於for()循環,而在於System.in.read(),它也將輸入流中的回車/換行提供爲字符他們也是爲什麼你的輸出分佈在幾條線上,而不是一切都在一條線上)

+0

那麼我該如何解決這個問題? – Gropai

+0

有幾種形式的InputStream.read()(請參閱http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html),您可以使用它,包括通過byte [],因此您可以檢索執行for循環時可用的所有字符(您可以使用外循環內的for ... in循環來檢查內容 https:// docs。 oracle.com/javase/tutorial/java/nutsandbolts/for.html –

2

就像Brian在評論中說的,這是因爲輸入是緩衝的。當你輸入a,然後按回車鍵,回車鍵將清除緩衝區,你會看到循環執行3次。一次用於第一個字符a,另外兩次用於表示新行和回車符的\n\r字符。