0

我是 java 的初学者,我正在努力让这段代码正常工作。我正在尝试读取 CSV 文件,然后使用该数据计算平均值,然后返回平均值的最高最低值和平均值的摘要。

输入如下所示:

艾丽西亚标记,89,90,100,95,75,85,94,100,90,92

鲍比·里克斯,98,79,87,79,9,98,7,19,98,78

以下是输出的样子(数字不正确,仅作为示例):

艾丽西亚标记 85.5 B

鲍比·里克斯 90.0 A-

...

高 98.2

低 56.5

平均 78.3333

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;

public class Test
{

    public static void main(String[] args)
    {
        Test x = new Test();
        x.high();
    }

    public void high()
    {
        File file2 = new File("scores.csv");
        try
        {
            Scanner scanner = new Scanner(file2);
            while (scanner.hasNextLine())
            {
                String line2 = scanner.nextLine();
                String[] value2 = line2.split(",");

                // Converts String Array into Double Array
                double[] score = new double[value2.length];
                for (int i = 1; i < value2.length; i++)
                {
                    score[i] = Double.parseDouble(value2[i]);
                }

                // Finds the sum and then the average, adds it to a array List
                ArrayList<Double> av;
                av = new ArrayList<Double>();
                double sumNum = 0.0;
                for (double i : score)
                {
                    sumNum += i;
                }
                double aver = sumNum / 10;
                av.add(aver);

                double max = 0, min = 100;
                for (int a = 0; a < av.size(); a++)
                {
                    double s = av.get(a);
                    max = Math.max(max, s);
                    min = Math.min(min, s);
                    aver += s;
                }

                System.out.println("High " + max + "");
                System.out.println("Low " + min + "");
                System.out.println("Average " + aver / av.size() + "");

            }
            scanner.close();
        }
        catch (FileNotFoundException e)
        {
            e.printStackTrace();
        }
    }
}

我认为我遇到的问题是while循环,但我不太确定。任何解决此问题的帮助将不胜感激。

4

2 回答 2

1

您在读取成绩的功能中有一个错误。您应该以这种方式修复它:

// Converts String Array into Double Array
double[] score = new double[value2.length - 1];
for (int i = 1; i < value2.length; i++) {
    score[i - 1] = Double.parseDouble(value2[i]);
}

据我了解,您需要所有成绩的最大值、最小值和平均值。那么你的代码应该是这样的:

package it.unitn.uvq.antonio.processor;

import java.io.File;
import java.io.FileNotFoundException;    
import java.util.ArrayList;
import java.util.Scanner;

public class Test {

    public static void main(String[] args) {
        Test x = new Test();
        x.high();
    }

    public void high() {
        File file2 = new File("/home/antonio/Scrivania/scores.csv");
        try {
            Scanner scanner = new Scanner(file2);
            ArrayList<Double> avgs = new ArrayList<>();
            double max = 0, min = 100;
            while (scanner.hasNextLine()) {
                String line2 = scanner.nextLine();
                String[] value2 = line2.split(",");

                // Converts String Array into Double Array
                double[] score = new double[value2.length - 1];
                for (int i = 1; i < value2.length; i++) {
                    score[i - 1] = Double.parseDouble(value2[i]);
                }

                // Finds the sum and then the average, adds it to a array List
                double sumNum = 0.0;
                for (double i : score) {
                    sumNum += i;
                    min = Math.min(min, i);
                    max = Math.max(max, i);
                }
                double avg = sumNum / 10;
                avgs.add(avg);

                System.out.println(avg);
            }
            scanner.close();
            double avgsSum = .0;
            for (double avg : avgs) {
                avgsSum += avg;
            }
            System.out.println("High " + max + "");
            System.out.println("Low " + min + "");
            System.out.println("Average " + avgsSum / avgs.size() + "");
        }
        catch (FileNotFoundException e) { 
            e.printStackTrace();
        }
    }
}
于 2013-05-05T20:06:16.260 回答
0

如果您只想要每个学生的平均值,然后是这些学生的最小值和最大值以及总平均值,您可以这样做:

编辑:添加了一个如何将数字转换为字符的示例。注意:我不知道你如何判断它是 B- 还是 D+ 等等。

import java.io.File;
import java.io.FileNotFoundException;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Scanner;

public class Test {

    public static void main(String[] args) {
        Test x = new Test();
        x.high();
    }

    public void high() {
        // to format the scores
        DecimalFormat df = new DecimalFormat("###.#");
        df.setRoundingMode(RoundingMode.HALF_UP);

        ArrayList<Double> averages = new ArrayList<Double>();

        File file2 = new File("scores.csv");

        try {
            Scanner scanner = new Scanner(file2);
            while (scanner.hasNextLine()) {
                String line = scanner.nextLine();
                String[] values = line.split(",");

                // Converts String Array into Double Array
                double[] scoresPerPerson = new double[values.length];

                for (int i = 1; i < values.length; i++) {
                    scoresPerPerson[i] = Double.parseDouble(values[i]);
                }

                // Finds the sum and then the average, adds it to a array List
                double sum = 0.0;

                for (double i : scoresPerPerson) {
                    sum += i;
                }

                double average = sum / values.length;
                averages.add(average);

                System.out.println(values[0] + ": " + df.format(average) + " "
                        + getCharGrade(average));

            }
            scanner.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        // Computes the average and get the max min

        double max = 0;
        double min = 100;
        double totalAverage = 0;

        for (double average : averages) {
            if (average > max) {
                max = average;
            }
            if (average < min) {
                min = average;
            }
            totalAverage += average;
        }

        // Final step to get the general average
        totalAverage /= averages.size();

        // Print out the final general data
        System.out.println();
        System.out.println("High : " + df.format(max));
        System.out.println("Low : " + df.format(min));
        System.out.println("Average : " + df.format(totalAverage));
    }

    private String getCharGrade(double average) {

        if (average >= 90) {
            return "A";
        } else if (average >= 80) {
            return "B";
        } else if (average >= 70) {
            return "C";
        } else if (average >= 60) {
            return "D";
        } else {
            return "F";
        }
    }
}

输出:

Alicia Marks: 82,7 B
Bobby Ricks: 59,3 F

High : 82,7
Low : 59,3
Average : 71
于 2013-05-05T20:35:33.517 回答