Java 按顺序打印所有System.out.println()语句

Java 按顺序打印所有System.out.println()语句,java,Java,我试图使用System.out.println()语句在java中打印一些语句,但它们不是按顺序打印的 if(us02_birth_b4_marriage()) { System.out.println("All user stories passed succesfully"); } else { System.out.println("There are following errors: "); for(String fail

我试图使用System.out.println()语句在java中打印一些语句,但它们不是按顺序打印的

if(us02_birth_b4_marriage())
{
    System.out.println("All user stories passed succesfully");
}
else
{
    System.out.println("There are following errors: ");
    for(String failString: failures)
    {
        System.err.println(failString);
    }
    //System.exit(0);
}

System.out.println("Individual");
System.out.format("%-10s%-20s%-10s%-15s%-10s%-15s%-15s%-20s%-20s\n", "ID", "Name", "Gender", "Birthday", "Age", "Alive", "Death", "Child", "Spouse");

该方法在类的开头定义。这有什么区别吗?请查看此处的输出

问题在于,您正在将一些消息写入
System.out
,而将其他消息写入
System.err
。这可能会导致行的顺序出乎意料(取决于您的预期…)。这主要是因为
System.out
System.err
是具有不同(Java端)缓冲特性的不同流

考虑到您运行应用程序的方式,它们恰好在同一个地方写入;i、 e.你的控制台。但即便如此,操作系统也不能保证标准输出和标准错误行的交错将完全符合应用程序编写它们的顺序


解决方案:如果您希望保证这些行将按照代码写入它们的顺序出现在控制台上,则必须将它们写入同一流。

在本文中,顺序是什么意思?如果您指的是它在代码中写入的顺序,则除非您的第一个
If
语句始终为
true
,否则不会发生这种情况。我指的是,它首先打印“个人”,然后打印“有以下错误:”,然后是System.err.println()和System.out.format()语句。这个序列每次都在变化。理想情况下,它应该打印“有以下错误”、System.err.println()、“个人”、System.out.format()。您需要写一个。这是否回答了您的问题?您可以尝试在每个println之后强制刷新System.out和System.err,但是,我相信它已经在每个新行字符之后自动刷新了。但也许可以尝试一下