首页 > 解决方案 > 读入 1000 个素数文本文件?

问题描述

我正在尝试完成一个旧的实验室工作表,以修改一些 java 代码,因为我忘记了如何编写(我对编码相当陌生)。在代码的一部分中,我必须读入(作为 Double 的 ArrayList)一个已提供的文本文件,其中包含前 1000 个素数。所以我目前有一个基本的方法需要调整以使其有效工作。我也在使用权重作为健身功能问题的一部分。

然后,我必须使用 (8) 个素数为 Scales 问题生成许多随机解决方案。

所以下面的代码,我需要在适当的地方编辑才能读取文件。

感谢您的帮助:D!

static public ArrayList<Double> ReadNumberFile(String filename) {
    ArrayList<Double> res = new ArrayList<Double>();
    Reader r;
    try {
        r = new BufferedReader(new FileReader(filename));
        StreamTokenizer stok = new StreamTokenizer(r);
        stok.parseNumbers();
        stok.nextToken();
        while (stok.ttype != StreamTokenizer.TT_EOF) {
            if (stok.ttype == StreamTokenizer.TT_NUMBER) {
                res.add(stok.nval);
            }
            stok.nextToken();
        }
    } catch (Exception E) {
        System.out.println("+++ReadFile: " + E.getMessage());
    }
    return (res);
}

标签: java

解决方案


您读取数字的方式将取决于给定文件的格式,关键是素数的分隔方式(即,将一个素数与下一个素数分开的字符)。从这里开始,我将假设它们是在浸出线上以一个素数提供给您的。

File file = new File("primes.txt");  // get a file object referring to the list of primes
List<String> lines = Files.readAllLines(file.toPath());  // read all the lines, and store them in a List<String>
List<Double> primes = new ArrayList<>();  // initialize an empty list to put the primes

for (int i = 0; i < lines.length(); i++) {  // iterate over the lines
    primes.add(Double.parseDouble(lines.get(i)));  // convert each line into a double and add to the list
}

几点:

  • 素数都是整数,你应该int在这里使用 s。
  • 这可以通过简单地使用来缩短(虽然不太容易向初学者解释):
List<Integer> primes = Files.lines(new File("primes.txt").getPath())
    .map(Integer::parseInt)
    .collect(Collectors.asList());
  • 这个实现对于输入格式非常脆弱,如果它们没有按照我的假设提供给您,则需要对其进行修改。例如,如果它们用逗号分隔,则必须将它们读入 a String,然后用于string.split(",")获取值数组。

推荐阅读