如何将均值放入arrayList,如何将输入文件中的分数放入自己的arrayList中?

时间:2017-05-09 20:40:51

标签: java arraylist mean

我的任务是:

  

假设有一个名为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行犯了什么错误,我希望有人可以帮我改进我的计划

1 个答案:

答案 0 :(得分:0)

%d说明符需要一个整数参数。在行out.printf("%-20s %5.2d\n", scores.get(i), avgs.get(i))中,您使用带有小数点%d)的.2说明符。