java - 读入 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);
}
解决方案
您读取数字的方式将取决于给定文件的格式,关键是素数的分隔方式(即,将一个素数与下一个素数分开的字符)。从这里开始,我将假设它们是在浸出线上以一个素数提供给您的。
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(",")
获取值数组。
推荐阅读
- c# - 将图像转换为二进制以存储在 asp.net 的数据库中
- java - 有什么方法可以屏蔽在运行时进入 jText 区域的值
- python - Tornado RequestHandler 参数化
- python - 使用请求使 Raspberry Pi 自动将文件上传到服务器
- list - 尝试在 Future 上使用数组方法“折叠”
- 获取商品的总价
- javascript - 谷歌地图 Javascript API 计费
- go - 从 Firestore 获取数据以显示 go 模板文件
- azure - IoT Central 到 Blob 存储数据加密遥测数据主体
- python - python tkinter接口如何创建一个新的显示txt文件
- python-3.x - 如何使用漂亮的汤从这个 html 代码中刮取年份