【问题标题】:System.out and System.err behave differentlySystem.out 和 System.err 行为不同
【发布时间】:2022-01-31 07:04:40
【问题描述】:

我是编程初学者。作为练习的一部分,我创建了一个简单的游戏,但在使用outerr 时遇到了一些问题。下面用部分代码和我的输出截图描述了这个问题:

 do{
                System.out.print("Press 'r' to play, 'i' to get info and 'q' to quit: ");
                input = scan.next().charAt(0);
                switch (input){
                    case 'r':
                        roundCount++;
                        System.out.print("A random number is generated for you, guess what it is: ");
                        int answer = scan.nextInt();
                        allAnswers.add(answer);
                        randomNumber = getRandom();
                        if(isRightAnswer(answer,randomNumber)){
                            System.out.print("Congrats! that was absolutely right guess, the number was "+randomNumber + ", ");
                            scoreCount += 5;
                            rightAnswers.add(answer);
                        }else{
                            System.out.print("Oops!, wrong guess, right answer is "+randomNumber +", ");
                            wrongAnswers.add(answer);
                        }
                        break;
                    case 'q':
                        System.out.println("Bye Bye!");
                        break;
                    case 'i':
                        printInfo();
                        break;
                    default:
                        System.out.print("Wrong Input --> ");
                        break;
                }
            }while(input != 'q');

问题在于outerr的行为不同,如下图所示,一个输出由out生成,另一个由err生成:

System.out 将在“按'r'播放,'i'获取信息和'q'退出:行之前打印“错误输入!->”行: strong>",这正是我想要的

System.err会在“Press 'r' to play,如下图:”行之后打印“Wrong input! ->”行

这两个流的行为差异背后的真正原因是什么?

【问题讨论】:

  • 您有没有想过,如果它们的行为相同,就不需要两种方法?
  • 所以我想知道这背后的原因。因为我想使用 err 而不是 out 来显示错误并获得所需的输出
  • 当您使用out 获得所需的输出时,为什么要使用err

标签: java io console output system


【解决方案1】:

看起来你使用 intelliJ 女巫比正常的命令行输出更多地分离错误流。它将把它染成红色并做其他调试工作。甚至可能发生在 err 行之后执行的 out 行将首先出现。仅将错误流用于严重的程序故障,而不用于错误的用户操作。编辑:即使在普通命令行上,也不能保证两个流会按顺序显示,因为您创建了关于命令行窗口的竞争条件

【讨论】:

  • 是的,在命令行中它按预期工作,我刚刚尝试过
【解决方案2】:

可能取决于您使用的 IDE,我在我的 Eclipse IDE 中使用 System.out 和 System.err 运行了您的代码,并且两者的输出相同。 可能在你的 out 和 err 流被不同的方式刷新。

【讨论】:

    猜你喜欢
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-15
    • 2012-11-19
    • 2012-09-17
    相关资源
    最近更新 更多