3 回答
TA贡献1853条经验 获得超18个赞
有几个问题:
您的代码将无法编译,因为没有方法PrintWriter 将(int, int, int). 您可以使用该方法 write(String s)来实现相同的目的。
output.write(String.valueOf("Min: " + min + "\n\nMax: " + max + "\n\nTotal : " + sum));
该文件作为字节序列读取,因此您需要使用 input.hasNextLine()读取每一行。使用您当前的代码,您的 while 循环不会被执行。接下来,您需要将每个String转换为Double。所以你的while循环需要调整为如下:
while (input.hasNextLine()) {
String currLine = input.nextLine();
// check for empty spaces
if (currLine != null && currLine.trim().length() > 0) {
currentNumber = Double.parseDouble(currLine);
// same from here
sum += currentNumber;
numberCount++;
if (currentNumber < min) {
min = currentNumber;
}
if (currentNumber > max) {
max = currentNumber;
}
}
}
您不能使用 int 来存储双精度值。因此,将所有 int 声明为双倍。(也不知道你为什么使用numberCount,它可以被删除。)
double currentNumber, sum = 0, numberCount = 0, min = 0, max = 0;
TA贡献1815条经验 获得超13个赞
如果您可以使用 Java 8 或 Java 9,您可以编写更短更简单的代码:
public static void main(String[] args) throws IOException {
DoubleSummaryStatistics statistics = Files
.lines(new File("./test1.txt").toPath())
.filter(l -> !l.isEmpty())
.mapToDouble(Double::parseDouble)
.summaryStatistics();
double min = statistics.getMin();
System.out.println("Min: " + min);
double max = statistics.getMax();
System.out.println("Max: " + max);
double sum = statistics.getSum();
System.out.println("Total: " + sum);
Files.write(new File("./test2.txt").toPath(), List.of(Double.toString(min), Double.toString(max), Double.toString(sum)));
}
该NIO的API定义了文件,也可以用来处理类和方法,工程结束文件(资源)。
所述流-API具有的类和方法来处理元素。要计算双精度流 ( DoubleStream)的总和、最大值和最小值,我们可以使用 方法DoubleStream.summaryStatistics()。
如果您不能使用 Java 9,请使用Arrays.asList()代替List.of()
TA贡献1934条经验 获得超2个赞
使用 printf 而不是写:
output.printf("Max: %d\n", max);
output.printf("Min: %d\n", min);
output.printf("Total: %d\n", sum);
添加回答
举报