我的程序有问题,特别是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”行。
谢谢大家的任何建议。
答案 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
。
无论您选择哪一个,都有大量的教程和代码示例供您使用。