0

我认为 和 之间的区别System.out.println()仅仅System.err.println()是消息如何打印到控制台。含义err打印错误消息(红色),而out打印标准消息。我注意到它们不像预期的那样相似(例如,总是在输出消息之前打印错误消息)。

但是有一个例子我特别困惑。假设我有这个简单的程序:

Scanner scanner = new Scanner(System.in);

while (true) {
    int num = scanner.nextInt();
    if (num > 0) {
        System.out.println("All good, bye");
        break;
    } else {
        System.out.println("Number must be possitive!");
        System.out.print("New try:");
    }
}

输出(来自我的测试):

在此处输入图像描述


但是,当我制作字面上相同的代码并更改消息“数字必须是正数”以使用以下方式打印时System.err.println()

Scanner scanner = new Scanner(System.in);

while (true) {
    int num = scanner.nextInt();
    if (num > 0) {
        System.out.println("All good, bye");
        break;
    } else {
        System.err.println("Number must be possitive!");
        System.out.print("New try:");
    }
}

输出(来自我的测试):

在此处输入图像描述

我不知道它是如何制作这些奇怪的印刷品的。有人能告诉我我错过了什么吗?

4

2 回答 2

1

我认为这是因为两个单独的流写入同一个控制台。

int i = 5;
while (--i>0) {
        System.out.println("Number must be possitive!");
        System.out.println("New try:");
}

System.out.println("\n\n with two separate streams \n");
i=5;
while (--i>0) {
    System.err.println("Number must be possitive!");
    System.out.println("New try:");
}

输出:

Number must be possitive!
New try:
Number must be possitive!
New try:
Number must be possitive!
New try:
Number must be possitive!
New try:


 with two separate streams 

Number must be possitive!
New try:
New try:
Number must be possitive!
Number must be possitive!
New try:
Number must be possitive!
New try:

由于两个流不同步,因此无法保证它们的写入顺序。

于 2021-03-27T08:51:01.370 回答
-1

我建议在控制台方面检查您的 IDE 设置。它恰好对我来说运行得很好:

我的编译示例

我使用的代码基本相同:

    import java.util.Scanner;
public class Main
{
    public static void main(String[] args) {
        
        System.out.print("Enter the number:");
        Scanner scanner = new Scanner(System.in);
    while (true) {
        int num = scanner.nextInt();
        if (num > 0) {
            System.out.println("All good, bye");
            break;
            
        } else {
            System.err.println("Number must be possitive!");
            System.out.print("New try:");
            
        }
        
    }
    }
}
于 2021-03-27T09:26:54.517 回答