簡體   English   中英

System.out 和 System.err 行為不同

[英]System.out and System.err behave differently

我是編程初學者。 作為練習的一部分,我創建了一個簡單的游戲,但在使用outerr時遇到了一些問題。 下面通過部分代碼和我的 output 的屏幕截圖描述了該問題:

 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的行為不同,如下圖所示,一個 output 由out生成,另一個由err生成:

由 System.out 生成 System.out將在“按'r'播放,'i'獲取信息和'q'退出: ”行之前打印“錯誤輸入!-> ”行,這正是我想要的

System.err會在“輸入錯誤!-> ”這行之后打印一行“按'r'播放,如下圖: 由 System.err 生成

這兩個流的行為變化背后的真正原因是什么?

看起來您使用 intelliJ 女巫將錯誤 stream 比正常命令行 output 更多。 它將把它染成紅色並做其他調試工作。 甚至可能發生在 err 行之后執行的 out 行將首先出現。 僅將錯誤 stream 用於嚴重的程序故障,而不是用於錯誤的用戶操作。 編輯:即使在普通命令行上,也不能保證兩個流會按順序顯示,因為您創建了關於命令行 window 的競爭條件

可能取決於您正在使用的 IDE,我在 eclipse IDE 中使用 System.out 和 System.err 運行了您的代碼,並得到了相同的輸出。 可能在你的 out 和 err 流被不同地刷新。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM