我制作了一个可以生成素数的程序.我希望程序写入文件.当我生成素数达到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)
我认为你的程序根本没有悬挂,只需花费很长时间来完成它的工作.
随着数字变大,检查它们所花费的时间与它们的平方根成比例增加.另外,素数之间的距离越大,数字越大.把这些放在一起,找到素数的速度会很快消失.
您是否已将调试器附加到程序中,并暂停执行以检查局部变量并查看它的位置?你有没有投入System.out.println("About to calculate for " + i);?你怎么知道你的程序"停止"?
第一步应该是调查你的程序实际上在做什么.如果输出带有println消息的时间戳,您还可以了解检查每个单独数字的速度如何衰减,因此当您发现暂停时,您可以粗略估计当前检查应该花多长时间.
此外,你的程序永远不会终止,因为你有一个无限的外循环.你的for循环的终止条件是i <= Integer.MAX_VALUE,这意味着它会一直运行,直到它找到i这样的i > Integer.MAX_VALUE.你能说出一个值是否合适i?
| 归档时间: |
|
| 查看次数: |
688 次 |
| 最近记录: |