本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看活动链接
提问:为什么打印“ B”比打印“#”要慢得多?
我生成了1000x的两个矩阵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");给still printing...。
正如其他指出它对他们正常工作的人一样,例如,我尝试了Ideone.com,并且这两段代码以相同的速度执行。
测试条件:
我从Netbeans 7.2运行了此测试,并将输出输出到其控制台中 我用来System.nanoTime()测量
高分回答:
是的,罪魁祸首肯定是包装文字。当我测试您的两个程序时,NetBeans IDE 8.2给了我以下结果。
第一矩阵:O和#= 6.03秒
第二矩阵:O和B = 50.97秒
仔细查看您的代码,您已经在第一个循环结束时使用了换行符。但是您没有在第二个循环中使用任何换行符。因此,您将在第二个循环中打印一个包含1000个字符的单词。这会导致换行问题。如果我们在B后面使用非单词字符“”,则仅需5.35秒即可编译程序。如果我们在传递100个值或50个值后在第二个循环中使用换行符,则分别只需要8.56秒和7.05秒。
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");
}
if(j%100==0){ //Adding a line break in second loop
System.out.println();
}
}
System.out.println("");
}
另一个建议是更改NetBeans IDE的设置。首先,转到NetBeans工具,然后单击选项。之后,单击“编辑器”,然后转到“格式”选项卡。然后选择任何地方的自动换行选项。编译该程序所需的时间几乎减少了6.24%。
文章翻译自 am2dgbqfb6mk75jcyanzabc67y-ac4c6men2g7xr2a-stackoverflow-com.translate.goog/questions/2…
作者建议:大家来找茬!!!
真心感谢帅逼靓女们能看到这里,如果这个文章写得还不错,觉得有点东西的话
求点赞👍 求关注❤️ 求分享👥 对8块腹肌的我来说真的 非常有用!!!
如果本篇博客有任何错误,请批评指教,不胜感激 !❤️❤️❤️❤️