标准输入被堆叠

时间:2017-01-03 12:35:05

标签: java input console

我的程序有问题,特别是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();

我原本预计在打印完输入后,也会打印“while loop ended”这一行,但是当我把“hi”写入eclipse控制台作为输入时,这就是我所得到的

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

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

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

并且程序仍在运行,并等待另一个输入,所以while循环下的其余代码没有被执行,所以我问你如何只进行一次输入,我输入一些单词左右然后代码将在循环中离开,换句话说,将打印“while loop end”行。

谢谢大家的任何建议。

2 个答案:

答案 0 :(得分:1)

根据ASCII,您的缓冲区正在读取104(h)105(i)和10(LF)和13(CR)。也就是说,你正在阅读' hi'加上行终止符和下一行。您可以将您的时间更改为以下结构:

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();

答案 1 :(得分:1)

由于您使用的是BufferedReader,因此您可以调用其readLine方法来获取用户键入的行。如果您只需要一行,则不需要循环。

另一个选择是调查java.util.Scanner

无论您选择哪一个,都有大量的教程和代码示例供您使用。