BufferedWriter问题

Jee*_*hah 1 java primes

我制作了一个可以生成素数的程序.我希望程序写入文件.当我生成素数达到Integer.Max_Value时,由于某种原因,它不会写出所有素数,它就会停止.这是我的代码:

import java.io.*;

public class Primes {


public static void main(String[] args) throws IOException {

    generate(Integer.MAX_VALUE);

}

// generate primes.
public static void generate(int limit) throws IOException {
     BufferedWriter writer = new BufferedWriter(new FileWriter("C:\\Primes.txt"));
     writer.write(2);
     for (int i = 3; i <= limit; i += 2) {
        if (isPrime(i)) {
            writer.write(Integer.toString(i));
            writer.newLine();
        }
    }
    writer.close();
}

// checking for primes
public static boolean isPrime(int n) {
    for (int i = 2; i <= (Math.sqrt(n)); i++) {
        if (n % i == 0) {
            return false;
        }
    }
    return true;
}
}
Run Code Online (Sandbox Code Playgroud)

And*_*yle 5

我认为你的程序根本没有悬挂,只需花费很长时间来完成它的工作.

随着数字变大,检查它们所花费的时间与它们的平方根成比例增加.另外,素数之间的距离越大,数字越大.把这些放在一起,找到素数的速度会很快消失.

您是否已将调试器附加到程序中,并暂停执行以检查局部变量并查看它的位置?你有没有投入System.out.println("About to calculate for " + i);?你怎么知道你的程序"停止"?

第一步应该是调查你的程序实际上在做什么.如果输出带有println消息的时间戳,您还可以了解检查每个单独数字的速度如何衰减,因此当您发现暂停时,您可以粗略估计当前检查应该花多长时间.


此外,你的程序永远不会终止,因为你有一个无限的外循环.你的for循环的终止条件是i <= Integer.MAX_VALUE,这意味着它会一直运行,直到它找到i这样的i > Integer.MAX_VALUE.你能说出一个值是否合适i