1. ホーム
  2. java

[解決済み] B "の印刷が "#"の印刷より劇的に遅いのはなぜですか?

2022-03-17 05:26:48

質問

の2つの行列を生成しました。 1000 x 1000 :

最初のマトリクス O# .
第2マトリクス OB .

以下のコードを使用すると、最初の行列は8.52秒で完了しました。

Random r = new Random();
for (int i = 0; i < 1000; i++) {
    for (int j = 0; j < 1000; j++) {
        if(r.nextInt(4) == 0) {
            System.out.print("O");
        } else {
            System.out.print("#");
        }
    }

   System.out.println("");
 }

このコードで、2つ目の行列は259.152秒で完了しました。

Random r = new Random();
for (int i = 0; i < 1000; i++) {
    for (int j = 0; j < 1000; j++) {
        if(r.nextInt(4) == 0) {
            System.out.print("O");
        } else {
            System.out.print("B"); //only line changed
        }
    }

    System.out.println("");
}

実行時間が劇的に異なる理由は何でしょうか?


コメントで提案されているように、印刷のみ System.out.print("#"); がかかる 7.8871 秒、一方 System.out.print("B");still printing... .

他の方のご指摘で、普通に使えるとのことでしたので、試しに アイディオーネ・ドットコム のように、どちらのコードも同じ速度で実行されます。

テスト条件

  • からこのテストを実行しました。 Netbeans 7.2 そのコンソールに出力される
  • 私は System.nanoTime() 計測用

解決方法は?

純粋な推測 を行おうとするターミナルを使用しているということです。 ワードラッピング を文字化けではなく、文字化けとして扱います。 B を単語文字として扱いますが # を非単語文字として扱います。そのため、行末に到達して改行する場所を探すと # を使うと、ほとんど即座に、そして喜んでそこで改行します。 B 例えば、バックスペースを出力し、ラップしている文字を上書きするためにスペースを出力するなど)。

でも、これは純粋な憶測です。