对于我正在处理的当前文件,我需要将所有双精度数加到一个总和中,同时忽略布尔值。虽然直接回答这个问题会很好,但我想要一个关于如何在未来忽略某些值的整体方法。
以文本文件为例,其格式如下:int " “布尔值” “整数” " 布尔值等 20 行(10 个整数,10 个布尔值)。
我的教授要我做的代码要求它是方法形式而不是测试类形式。
代码如下:
public double sumWithoutBoolean(File file) {
double sum =0;
try {
Scanner input = new Scanner(file);
while(input.hasNextBoolean()) {
boolean line2 = input.nextBoolean();
String line = Boolean.toString(line2);
if (line.equalsIgnoreCase("true")||line.equalsIgnoreCase("false")) {
line="0";
}
while (input.hasNextLine()) {
}
try {
sum+=Double.parseDouble(line);
}
catch (NumberFormatException e){
System.out.println("Error Found");
}
}
input.close();
}catch (FileNotFoundException e) {
System.out.println("File Not Found.");
}
return sum;
}
在运行了多个想法之后,这是我设法没有错误地运行的一个,尽管我确信有一个更紧凑的想法。
你可以这样做:
import java.nio.file.Files;
import java.nio.file.Path;
public class LineSummer {
public static void main(String[] args) {
try {
double sum = Files.lines(Path.of(args[0]))
.filter(s -> s.matches("\\d*\\.?\\d+"))
.mapToDouble(Double::valueOf)
.sum();
System.out.printf("Sum of numbers is %.2f%n", sum);
} catch (Throwable t) {
t.printStackTrace();
}
}
}