Java绘制X形斜线代码CPU占用高及Windows编译失败问题咨询
Hey there! Let's tackle your three Java issues one by one—they're all common pitfalls, so don't worry!
1. 为什么i5 CPU占用高达28%?
你的代码嵌套了两层循环,外层跑20000次,内层每次要执行i次System.out.print(" "),总共有将近2亿次的控制台输出操作!控制台IO本身是比较消耗资源的:每次调用print都要触发内核态与用户态的切换,操作系统还要处理字符渲染、缓冲区刷新等工作,这么高频的操作必然会让CPU持续忙碌。
优化方案:用StringBuilder预先构建每一行的内容,一次性输出所有行,大幅减少IO次数:
public class Main { public static void main(String[] args) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < 20000; i++) { sb.append(" ".repeat(i)); // Java 11+可用,低版本可通过循环append空格实现 sb.append("X\n"); } System.out.print(sb); } }
这样IO操作从2亿次降到1次,CPU占用会立刻明显降低。
2. 运行后期X间距变大的奇怪现象
这个问题大概率是控制台渲染跟不上输出节奏导致的视觉误差。当你每秒输出成千上万行时,控制台窗口的渲染线程会被大量IO请求挤占,可能出现行渲染不连贯、行高被拉伸或者滚动延迟的情况,让你误以为X的间距变大了。
解决方法:采用上面的StringBuilder批量输出方案,一次性把所有内容输出,控制台可以平稳渲染,就不会出现这种视觉差异了。另外也可以检查下控制台的设置,比如是否开启了自动换行、字体大小有没有被系统自动调整。
3. Windows下编译失败,但在线编译正常的原因
你代码里的<和>是HTML实体符号(用来表示<和>),在线编译平台会自动把这些HTML实体转换成正常的Java语法符号,但Windows本地的javac编译器不认识这些实体,会报“无效字符”的编译错误。
修复方法:把代码里所有的<替换成<,>替换成>,比如:
原代码片段:
for (int i=0; i<20000; i++) { for (int j=0; j<i; j++) { ... } }
改成:
for (int i=0; i<20000; i++) { for (int j=0; j<i; j++) { ... } }
再用javac编译就没问题了。
内容的提问来源于stack exchange,提问作者Basafish

