java - 找出输入文本文件的最小值、最大值和总数并将其写入新的输出文本文件?
问题描述
package file_handling;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.PrintWriter;
import java.util.Scanner;
public class WriteToFile {
public static void main(String[] args) {
int currentNumber, sum = 0, numberCount=0;
FileReader infile;
Scanner input = new Scanner(System.in);
File file2 = new File("D:/test1.txt");
input = new Scanner(file2);
int min;
int max;
while (input.hasNextInt()){
currentNumber = input.nextInt();
sum+=currentNumber;
numberCount++;
if(currentNumber < min) {
min= currentNumber;
}
if(currentNumber > max) {
max = currentNumber;
}
}
System.out.println("Min: " + min);
System.out.println("Max: " + max);
System.out.println("Total: " + sum);
File file1 = new File("D:/test.txt");
try {
PrintWriter output = new PrintWriter(file1);
output.write(max, min, sum);
output.close(); //don't forget this method
} catch (FileNotFoundException e) {
System.out.println(e.getMessage());
}
}
}
输入.txt:
9.22
11.55
-2.21
16.95
22.11
-5.11
根据 input.txt 的内容,我正在尝试编写一个程序来找出最大数、最小数和这些数字的总和,并将结果写入一个名为 output.txt 的文件中。
输出.txt:
Min:
Max:
Total:
我必须使用 Scanner 类来读取文件并使用 PrintWriter 类来写出文件。
我不确定我做错了什么,有人可以帮助我吗?
我在第 44 行收到此错误:output.write(max, min, sum);
线程“main”java.lang.Error 中的异常:未解决的编译问题:PrintWriter 类型中的方法 write(char[], int, int) 不适用于参数 (int, int , 整数)
在 file_handling.WriteToFile.main(WriteToFile.java:44)
解决方案
有几个问题:
您的代码将无法编译,因为没有
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;
推荐阅读
- spring-boot - 将表行数据从 JSP 传递到控制器
- reactjs - 状态更新比警报显示快
- azure-devops - 获取 Xamarin.Android 和 iOS 的版本号
- android - TextView 末尾的 3 个点垂直居中
- javascript - ReactJS 更改自定义组件内的道具
- php - 使用带有 Gmail 帐户的 PHPMailer 发送邮件
- php - Phpunit Assert 是否抛出任何错误代码?
- python - ValueError:layersequential_2 的输入 0 与 layer 不兼容::预期 min_ndim=4,发现 ndim=3。收到的完整形状:(10、300、3)
- reactjs - react-apexcharts 中的 CSS
- c# - Automapper - 使 IncludeMembers() 忽略 null