「B」の印刷が「#」の印刷よりも大幅に遅いのはなぜですか? 質問する

「B」の印刷が「#」の印刷よりも大幅に遅いのはなぜですか? 質問する

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

最初の行列:Oおよび#。2
番目の行列:OおよびB

次のコードを使用すると、最初の行列が完了するまでに 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()測定に使用しました

ベストアンサー1

純粋な推測ですが、あなたが使用している端末は、単語の折り返しは文字折り返しではなく を使用し、 をB単語文字としてではなく#非単語文字として扱います。そのため、行末に達して行を分割する場所を検索すると、 が#ほぼ即座に見つかり、そこで問題なく分割されます。一方B、 の場合は、より長い時間検索を続ける必要があり、折り返すテキストが増える可能性があります (一部の端末ではコストがかかる場合があります。たとえば、バックスペースを出力し、次にスペースを出力して折り返される文字を上書きするなど)。

しかし、それは単なる憶測です。

おすすめ記事