我有一个作业,用户必须输入姓名,然后输入分数,然后重复该过程直到完成,按 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();
}
当我尝试对分数进行平均时,结果不正确。
最佳答案
问题出在 Average
的调用上:您正在计算所有内容的平均值,而不是相应 names
中 “Q”
之前的所有内容位置。您将未写入的分数部分中的所有这些零加在一起,然后将其除以 100 - 整个数组的长度。
解决此问题的最简单方法是从 inputPartInformation
方法返回 "Q"
条目的位置:
var count = inputPartInformation(players, scores);
现在您可以使用 LINQ 的 Take
函数来获得正确的平均值:
double average = scores.Take(count).Average();
关于c# - 获取数组的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11979321/