2017-01-03 81 views
-1

我有我的程序問題,具體與Standart輸入。標準輸入堆積

BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); 
    int in; 
    while ((in = input.read()) != -1) { 
     System.out.println(((char) in)); 
     System.out.println("going throught while loop"); 
    } 
    System.out.println("while loop ended"); 
    input.close(); 

我本來期望的是輸入已經被打印後,行「而循環結束」將被印刷爲好,但這裏是我所得到的,當我寫的「hi」到Eclipse控制檯輸入

...............................

hi 
h 
going throught while loop 
i 
going throught while loop 
going throught while loop 
going throught while loop 

.......... ...............

和程序仍在運行,並等待另一個輸入,所以剩下的代碼和呃while循環沒有執行,所以我問你如何使它只是一次輸入,我輸入一些字左右,然後代碼將離開while循環,換句話說,「while循環結束」行將是打印。

謝謝大家的任何建議。

+0

read()方法 - 讀取單個字符。所以對於每個字符循環都會執行,直到您的輸入字符爲止!= -1 – SujitKumar

+0

您是如何做終端輸入的?在DOS上,這是^ Z和在Unix上它是^ D –

回答

1

根據ASCII,您的緩衝區正在讀取104(h)105(i)和10(LF)和13(CR)。也就是說,你正在閱讀'嗨'加上行結束符和下一行。你可以改變你的以下結構:

while ((in = input.read()) != -1 && in != 13 && in != 10) 

我已經看到了它,當我改變你的sysout打印int值。

如果你可以看到所有的線和字符串打印每個字符,執行如下:

Scanner input = new Scanner(System.in); 
String text = input.nextLine(); 
for(char ch: text.toCharArray()){ 
    System.out.println(ch); 
    System.out.printf("going throught while loop \n"); 
} 
System.out.println("while loop ended"); 
input.close(); 
+0

我很好,我需要程序離開while循環後給出第一個輸入並繼續下面的代碼 – Fredegar

+0

@Fredegar,看看我的編輯..你可以更改代碼使用掃描儀..你讀所有的行,並採取一次所有的字符串。 – BrunoDM

1

由於您使用的是BufferedReader,你可能只是調用它readLine方法來獲取行用戶已鍵入。如果您只需要一條線路,則不需要循環。

另一種選擇是調查java.util.Scanner

無論你是去哪一個,都有很多教程和代碼示例供你使用。