获取阵列的平均值

时间:2012-08-16 00:58:29

标签: c# arrays

我有一个分配,用户必须输入一个名称,然后一个分数,并重复该过程直到完成,按Q,然后数组将显示名称和分数,然后给出平均值所有这些分数。我现在拥有的就是这个。

    static void inputPartInformation(string[] pl, double[] sc)
    {

        int i = 0;

        do
        {
            Console.Write("Enter The Player's Name: ");

            pl[i] = Console.ReadLine();


            Console.Write("Enter Their Score: ");

            sc[i] = double.Parse(Console.ReadLine());

        }
        while (pl[i++].CompareTo("Q") != 0);

    }


    static void displayParts(string[] pl, double[] sc)
    {
        int i = 0;
        while (pl[i].CompareTo("Q") != 0)
        {
            Console.WriteLine("{0,15}{1,6}", pl[i], sc[i]);
            ++i;
        }

    }

    static void Main(string[] args)
    {

        String[] players = new String[100];

        double[] scores = new double[100];

        inputPartInformation(players, scores);



        displayParts(players, scores);


        double average = scores.Average();
        Console.WriteLine("The Average is: {0}", average);



        Console.ReadLine();

    }

当我尝试对分数进行平均时,它并没有正确显示。

3 个答案:

答案 0 :(得分:5)

问题在于Average的调用:您正在平均所有内容,而不是相应"Q"位置names的所有内容。您将所有这些零加在未写入的分数部分中,然后将其除以100 - 整个数组的长度。

解决此问题的最简单方法是从"Q"方法返回inputPartInformation条目的位置:

var count = inputPartInformation(players, scores);

现在您可以使用LINQ的Take函数来获得正确的平均值:

double average = scores.Take(count).Average();

答案 1 :(得分:1)

我建议您计算已输入的分数(在变量N中)并使用.Take(N)函数仅返回N分数数组。

示例:

double[] list = new double[100];
// assumed first N values are filled only.
// N = ...
list = list.Take(N).ToArray();

double average = list.Average();

答案 2 :(得分:1)

你必须使用数组吗?使用List可能是更好的选择,因为只要他们不断添加分数就可以添加它。这样当他们退出并且你去取平均值时,它将不包含任何未输入分数的0。