问题

我生成了 1000 x 1000

的两个矩阵:

第一个矩阵: O 第二矩阵: 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("");
 }

使用此代码,第二个矩阵需要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");代码>给出仍在打印... .

由于其他人指出它对他们正常工作,我尝试 Ideone.com 例如,两段代码执行相同速度.

测试条件:

  • I ran this test from Netbeans 7.2, with the output into its console
  • I used System.nanoTime() for measurements


解决方法

纯粹推测是您使用的是尝试自动换行的终端而不是字符包装,并将 B 视为字字符,但将视为非字字符.因此,当它到达一行的结尾并搜索一个地方来打破行,它看到一个几乎立即,愉快地打破那里;而对于 B ,它必须保持更长的搜索,并且可以具有更多的要包装的文本(这在一些终端上可能是昂贵的,例如,输出后退,然后输出空格以覆盖正在被包装的字母).

但这是纯粹的猜测.




相关问题推荐