import java.io.PrintStream;
import java.util.Scanner;
public class OutputTest
{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
PrintStream out = new PrintStream(System.out);
while(true)
{
int in = scan.nextInt();
if(in == 0) break;
System.out.println(in*in);
}
out.flush();
}
}
我希望这个程序能够得到一个数字列表,每行一个,然后当它达到零时,打印所有正方形,每行一个。相反,它只是回显我用方形键入的每个数字。
理想情况下,我实际上包括这一行:
System.setOut(out);
然后正常编写我的程序的其余部分(除了最后的刷新),但这与回声的结果相同。
但是,将PrintStream
更改为PrintWriter
确实可以按预期工作,但由于System.setOut
未延长PrintWriter
,我无法OutputStream
为什么这不像我期望的那样?
答案 0 :(得分:2)
flush()意味着“如果有什么要刷新则刷新”。在手动刷新之前,任何流或编写器 缓冲区都不是预期的行为。您可以使用缓冲流包装输出流,但是当您指定的缓冲区大小已满时,它也会刷新。在您的情况下,最简单的解决方案是写入StringBuffer,然后在接收零时打印它。