我制作了一个可以生成质数的程序。我希望程序写入文件。当我生成最大为 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;
}
}
最佳答案
我认为你的程序根本没有挂起,它只是需要很长时间才能完成它的工作。
随着数字变大,检查它们所花费的时间与它们的平方根成正比。此外,素数之间的距离越大,数字越大。将这些放在一起,发现素数的速度将很快下降。
您是否已将调试器附加到您的程序,并暂停执行以检查局部变量并查看它到达了哪里?你有没有输入System.out.println("About to calculate for " + i);
?您如何知道您的程序“刚刚停止”?
第一步应该是调查您的程序实际在做什么。如果您使用 println 消息输出时间戳,您还可以了解检查每个数字的速度是如何衰减的,因此当您发现暂停时,您可以粗略估计当前检查需要多长时间。
此外,您的程序永远不会终止,因为您有一个无限外循环。你的for
循环的终止条件是 i <= Integer.MAX_VALUE
,这意味着它会一直运行直到找到 i
。这样 i > Integer.MAX_VALUE
.你能为 i
命名一个值吗?哪里会成立?
关于java - BufferedWriter问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6154722/