2017-01-03 106 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

无论你是去哪一个,都有很多教程和代码示例供你使用。