【问题标题】:Printing all System.out.println() statements sequentially [duplicate]按顺序打印所有 System.out.println() 语句[重复]
【发布时间】:2020-02-24 01:02:54
【问题描述】:

我正在尝试使用 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");

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

【问题讨论】:

  • 在这种情况下,顺序是什么意思?如果您指的是它在代码中写入的顺序,那么除非您的第一个 if 语句始终是 true,否则不会发生这种情况。
  • 按顺序我的意思是,它首先打印“个人”,然后是“有以下错误:”,然后是 System.err.println(),然后是 System.out.format() 语句。而且这个顺序每次都在不断变化。理想情况下,它应该打印“有以下错误”、System.err.println()、“Individual”、System.out.format()。
  • 你需要写一个minimal reproducible example
  • 您可以尝试在每个 println 之后强制刷新 System.out 和 System.err,但是,我相信它已经在每个换行符之后自动刷新。但可能值得尝试

标签: java


【解决方案1】:

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

鉴于您运行应用程序的方式,它们碰巧写到同一个地方;即您的控制台。但即便如此,操作系统也不保证标准输出和标准错误行的交错将完全对应于应用程序编写它们的顺序。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-12
    • 2021-09-17
    • 1970-01-01
    相关资源
    最近更新 更多