1000
xの行列を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
、 の場合は、より長い時間検索を続ける必要があり、折り返すテキストが増える可能性があります (一部の端末ではコストがかかる場合があります。たとえば、バックスペースを出力し、次にスペースを出力して折り返される文字を上書きするなど)。
しかし、それは単なる憶測です。