java - BufferedWriter问题

标签 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;
}
}

最佳答案

我认为你的程序根本没有挂起,它只是需要很长时间才能完成它的工作。

随着数字变大,检查它们所花费的时间与它们的平方根成正比。此外,素数之间的距离越大,数字越大。将这些放在一起,发现素数的速度将很快下降。

您是否已将调试器附加到您的程序,并暂停执行以检查局部变量并查看它到达了哪里?你有没有输入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/

相关文章:

java - Android 保存图片到指定文件夹

java - 如何编写java方法(如果String x = to String y返回String z)

java - Javers 审核自定义删除

java.sql.SQLException : No suitable driver found for jdbc:mysql://localhost/mydb? autoReconnectForPools=true&useUnicode=true&characterEncoding=utf-8

c++ - Prime 测试程序不起作用

python - 使用 for 循环返回最多 n 个素数的列表

.net - 有没有办法在不使用外部库的情况下在 C# 中生成大素数?

java - 寻找素数的程序。第二章 自测schildt java初学者指南

concurrency - Elixir:与 worker 一起寻找质数,仅使用 1 个 CPU

java - 编辑 JTable 时行为不一致