19

このJavaコードを検討してください:

public class CMain {
    public static void main(String[] args){

        for (int i = 0; i < 10; i++) {
            System.out.println("A");
            System.err.println("B");
        }

    }
}

コードをざっと見てみると、出力は As と B を交互に出力する必要があると考える人もいるかもしれません。しかしそうではありません!Aキャラ10体、Bキャラ10体のランダム登場です。このようなもの:

ここに画像の説明を入力

何故ですか?AsとBが交互に表示されるようにするための解決策は何ですか(ABABAB ...)この質問をする前に、解決策について他のいくつかの同様の質問を確認しましたが、私の場合はうまくいきませんでした!私はそれらのいくつかをここに持ってきました:

4

3 に答える 3

11
Why does this happen?

これは、outerrが 2 つの異なる出力ストリームであるためです。ただし、どちらもコンソールに出力されます。したがって、それらを異なるストリームとして見ることはありません。さらに、out.println()実行すると、ステートメントが実行されるとすぐにコンソールに出力が表示されるとは限りません。代わりに、文字列は通常 (システムによって異なります) 出力バッファーに格納され (必要に応じて)、システムによって後で処理され、バッファーからの出力が画面に表示されます。

Solution :(

Eng.Fouadが指摘したように、それらを使用したり順序付けたりすることができますsetOut(System.err)setErr(System.out)、実際にこれをアプリケーションに配置する場合は、それを行うことをお勧めしません (デバッグ目的でのみ使用してください)。

提案された解決策が行うことは、標準出力と標準エラーの両方に 1 つのストリームのみを使用することになりますが、これは良いことではないと思います。

于 2013-02-28T23:07:07.137 に答える
5

それらは異なるものOutputStreamです。それらを印刷する順序を本当に保証する必要がある場合は、次を使用します。

System.setErr(System.out);

また

System.setOut(System.err);
于 2013-02-28T23:10:11.143 に答える
0

2 つの別々のストリームがあるため、提供している出力が可能です。

于 2013-02-28T23:03:41.353 に答える