[英]System.out and System.err behave differently
我是編程初學者。 作為練習的一部分,我創建了一個簡單的游戲,但在使用out
和err
時遇到了一些問題。 下面通過部分代碼和我的 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');
問題是out
和err
的行為不同,如下圖所示,一個 output 由out
生成,另一個由err
生成:
System.out
將在“按'r'播放,'i'獲取信息和'q'退出: ”行之前打印“錯誤輸入!-> ”行,這正是我想要的
而System.err
會在“輸入錯誤!-> ”這行之后打印一行“按'r'播放,如下圖: ”
這兩個流的行為變化背后的真正原因是什么?
看起來您使用 intelliJ 女巫將錯誤 stream 比正常命令行 output 更多。 它將把它染成紅色並做其他調試工作。 甚至可能發生在 err 行之后執行的 out 行將首先出現。 僅將錯誤 stream 用於嚴重的程序故障,而不是用於錯誤的用戶操作。 編輯:即使在普通命令行上,也不能保證兩個流會按順序顯示,因為您創建了關於命令行 window 的競爭條件
可能取決於您正在使用的 IDE,我在 eclipse IDE 中使用 System.out 和 System.err 運行了您的代碼,並得到了相同的輸出。 可能在你的 out 和 err 流被不同地刷新。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.