3 回答

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超18個(gè)贊
有幾個(gè)問題:
您的代碼將無(wú)法編譯,因?yàn)闆]有方法PrintWriter 將(int, int, int). 您可以使用該方法 write(String s)來(lái)實(shí)現(xiàn)相同的目的。
output.write(String.valueOf("Min: " + min + "\n\nMax: " + max + "\n\nTotal : " + sum));
該文件作為字節(jié)序列讀取,因此您需要使用 input.hasNextLine()讀取每一行。使用您當(dāng)前的代碼,您的 while 循環(huán)不會(huì)被執(zhí)行。接下來(lái),您需要將每個(gè)String轉(zhuǎn)換為Double。所以你的while循環(huán)需要調(diào)整為如下:
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 來(lái)存儲(chǔ)雙精度值。因此,將所有 int 聲明為雙倍。(也不知道你為什么使用numberCount,它可以被刪除。)
double currentNumber, sum = 0, numberCount = 0, min = 0, max = 0;

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超13個(gè)贊
如果您可以使用 Java 8 或 Java 9,您可以編寫更短更簡(jiǎn)單的代碼:
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定義了文件,也可以用來(lái)處理類和方法,工程結(jié)束文件(資源)。
所述流-API具有的類和方法來(lái)處理元素。要計(jì)算雙精度流 ( DoubleStream)的總和、最大值和最小值,我們可以使用 方法DoubleStream.summaryStatistics()。
如果您不能使用 Java 9,請(qǐng)使用Arrays.asList()代替List.of()

TA貢獻(xiàn)1934條經(jīng)驗(yàn) 獲得超2個(gè)贊
使用 printf 而不是寫:
output.printf("Max: %d\n", max);
output.printf("Min: %d\n", min);
output.printf("Total: %d\n", sum);
添加回答
舉報(bào)