为什么我的Java绘图代码占用大量CPU?

时间:2019-02-09 14:04:23

标签: java

我学习了3天的Java,并编写了一条代码,用X绘制对角线。这占用了i5 CPU的28%,我不知道为什么。

public class Main { 
    public static void main(String[] args) { 

        for (int i=0; i<20000; i++) {
            for (int j=0; j<i; j++) {
                System.out.print("  ");
            }
            System.out.println("X");
        }
    }
}

编辑1:顺便说一句,在我运行它的前几分钟和10分钟后,输出有些不同。奇怪的。 X之间的距离变长。 10分钟后截图

编辑2:我编写了另一个代码,只是想知道我到达的“进度”,当我达到100、200等时,它将打印出来。但是代码无法在Windows上编译,而在https://www.compilejava.net上可以正常编译。有什么问题?

public class Main {
  public static void main(String[] args) { 

for (int i=0; i<20000; i++) {
    for (int j=0; j<i; j++)
    {
    System.out.print("  ");
    }
System.out.println("X");
if ((i % 100)==0) {
System.out.println("Your cute code made it to the 100th lapse!");
}
}
}
}

4 个答案:

答案 0 :(得分:2)

要演示此处发生的情况,请考虑以下代码:

public static void main(String[] args) {

    int iTotal = 0;
    int jTotal = 0;
    for (int i = 0; i < 20000; i++) {
        for (int j = 0; j < i; j++) {
            jTotal += 1;
        }
        iTotal += 1;
    }

    System.out.println("Total I: " + iTotal);
    System.out.println("Total J: " + jTotal);
    System.out.println("Total:   " + jTotal + iTotal);
}

在这里,我已经删除了打印件,只是使用计数器来帮助您准确了解此处发生的情况

输出:

Total I: 20,000
Total J: 199,990,000
Total:   19,999,000,020,000

答案 1 :(得分:1)

很明显,这将花费很多! 它将迭代很多次! j的每个值都是20000(1 + 2 + 3 + 4 + ... + 19999 + 20000)的总和。

因此,复杂度高于O(n)

考虑到这一点,您正在执行的打印数量确实很高。 20000倍X和20000空格的总和!

答案 2 :(得分:1)

您的代码尝试打印 20000 个'X'字符,就像在注释中看到的那样,但是更糟糕的是,它尝试打印总共约 400000000 个空格字符。电脑速度很快,但这仍然需要一些努力。

答案 3 :(得分:0)

如果正确记住我的高中数学,则您将执行大约2亿个打印呼叫。您正在产生2万行屏幕输出。使用相当大量的CPU并花费一些时间来完成似乎并不奇怪。

相关问题