我的任务是:
假设有一个名为Numbers.txt的文件包含多个 数据线。每行包含三个整数。写一个程序 从文件中读取每行数据并放置平均值 将三个整数转换为整数的ArrayList。毕竟数据 已阅读并计算您的程序应写的平均值 一个名为Output.out
的文件的平均值
输入文件中的测试数据包括以下内容:
79 84 90
92 78 85
90 88 92
98 94 92
88 78 84
这是我为完成作业而编写的代码:
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.StringTokenizer;
public class MeanCalc
{
public static void main(String[] args)
{
try
(FileReader reader = new FileReader("Numbers.txt");
Scanner in = new Scanner(reader);
FileWriter writer = new FileWriter("Output.txt");
PrintWriter out = new PrintWriter(writer))
{
ArrayList<String> scores = new ArrayList<String>();
ArrayList<Integer> avgs = new ArrayList<Integer>();
while(in.hasNextLine())
{
String nextLine = in.nextLine();
StringTokenizer st = new StringTokenizer(nextLine);
if(st.countTokens() == 3)
{
String score1 = st.nextToken();
String score2 = st.nextToken();
String score3 = st.nextToken();
try
{
int s1 = Integer.parseInt(score1);
int s2 = Integer.parseInt(score2);
int s3 = Integer.parseInt(score3);
scores.add(score1);
scores.add(score2);
scores.add(score3);
avgs.add((s1 + s2 + s3)/3);
}
catch(NumberFormatException e)
{System.out.println("Invalid data: " + nextLine);}
}
}
if(scores.size() > 0)
{
calcMean(avgs);
for(int i = 0; i < scores.size(); i++)
out.printf("%-20s %5.2d\n", scores.get(i), avgs.get(i));
}
}
catch(IOException e)
{
System.out.println("Error processing file: " + e);
System.exit(1);
}
}
public static double calcMean(ArrayList<Integer> table)
{
double total = 0;
for(int i = 0; i < table.size(); ++i)
total += table.get(i);
return total/table.size();
}
}
我编写的代码无法正常工作,因为它给了我以下错误:
Exception in thread "main" java.util.IllegalFormatPrecisionException: 2
at java.util.Formatter$FormatSpecifier.checkInteger(Formatter.java:2984)
at java.util.Formatter$FormatSpecifier.<init>(Formatter.java:2729)
at java.util.Formatter.parse(Formatter.java:2560)
at java.util.Formatter.format(Formatter.java:2501)
at java.io.PrintWriter.format(PrintWriter.java:905)
at java.io.PrintWriter.printf(PrintWriter.java:804)
at MeanCalc.main(MeanCalc.java:51)
我不确定我在第51行犯了什么错误,我希望有人可以帮我改进我的计划
答案 0 :(得分:0)
%d
说明符需要一个整数参数。在行out.printf("%-20s %5.2d\n", scores.get(i), avgs.get(i))
中,您使用带有小数点%d
)的.2
说明符。