C#编写一个函数来计算平均年龄,该函数以对象数组作为参数。
C#编写一个函数来计算平均年龄,该函数以对象数组作为参数。
我需要创建一个计算一个班级50名学生平均年龄的函数,以下是我的代码:\n
public class Student { public int[] age = new int[10]; Student() { age[0] = 17; age[1] = 19; age[2] = 17; age[3] = 18; age[4] = 17; age[5] = 18; age[6] = 18; age[7] = 19; age[8] = 17; age[9] = 18; } } class Program { public void averageAge(Student student) { int avgage = 0; for (int i = 0; i < 50; i++) { avgage += student.age[i]; } avgage /= 50; } static void Main(string[] args) { // 主函数内容 } }
\n我收到一个错误,错误信息是不能将值分配给“i”,因为它是foreach循环的迭代变量,还有其他方式可以初始化这个学生年龄的数组吗?因为我需要计算50名学生的平均年龄,所以分配50次感觉有点冗余。\n我不知道当时是怎么想的,以这种方式使用foreach是错误的,现在我用for循环替换了foreach,如下所示:\n
public void averageAge(Student student) { int avgage = 0; for (int i = 0; i < 50; i++) { avgage += student.age[i]; } avgage /= 50; }
问题的原因是提问者想要编写一个函数来计算平均年龄,该函数将接受一个对象数组作为参数。然而,提问者最初给出的代码并没有实现这个功能。
解决方法是提供了一个包含所需功能的新代码示例。该代码示例使用了C#的LINQ库来计算学生的平均年龄。在示例中,首先创建了一个ClassRoom类,该类包含一个名为Students的学生列表。然后,通过循环向ClassRoom的Students列表中添加了10个年龄在18到30之间的随机学生对象。最后,使用LINQ的Average函数计算了学生年龄的平均值,并将结果输出到控制台。
这个新的代码示例提供了一个简洁而有效的解决方法,可以用来计算学生年龄的平均值。这样,提问者可以根据自己的需求进行修改和使用。
问题的出现原因:
问题的出现是因为需要计算一个学生数组的平均年龄,但需要将学生数组作为参数传递给函数进行计算。给出的代码片段中提供了一种使用Linq的方法来计算平均年龄,还提供了使用循环的两种方法来计算平均年龄。
解决方法:
解决方法是创建一个函数来计算平均年龄,并将学生数组作为参数传递给该函数。可以使用给出的代码片段中的任一方法来实现计算平均年龄的函数。
文章整理如下:
使用Linq可以这样写:
using System.Linq; var student = new Student(); int averageAge = (int)student.age.Average();
[https://learn.microsoft.com/dotnet/api/system.linq.enumerable.average](https://learn.microsoft.com/dotnet/api/system.linq.enumerable.average)
使用循环可以这样写:
int averageAge = 0; for (int index = 0; index < student.age.Length; index++) averageAge = (averageAge + student.age[index]) / 2; Console.WriteLine(avgage);
使用foreach可以这样写:
foreach (int value in student.age) averageAge = (averageAge + value) / 2;
因此,可以将方法定义为:
public int GetAverageAge(Student student) { int result = 0; foreach (int value in student.age) result = (result + value) / 2; return result; }
可以这样使用:
static void main(string[] args) { var student = new Student(); int averageAge = GetAverageAge(student); }
输出:
Linq = 17 Loop = 17
将构造函数设为public,可以将方法放在类本身中:
public class Student { public int[] age = new int[10]; public int GetAverageAge() { int result = 0; foreach (int value in student.age) averageAge = (averageAge + value) / 2; return result; } public Student() { ... } }
还可以使用属性来实现:
public int AverageAge { get { int result = 0; foreach (int value in student.age) averageAge = (averageAge + value) / 2; return result; } }
或者简单地使用:
public int AverageAge => (int)age.Average();
如果每个学生实例都有多个年龄,或者是一个学生类的集合,应该将类命名为`Students`而不是`Student`。如果学生人数可能变化,可以考虑使用`List
根据问题的要求,最好创建一个名为`studentsAges`的类,该类具有一个数组数据字段`ages`,该字段是所有学生年龄的集合。然后将`studentsAges`类的对象作为参数传递给计算平均年龄的函数中。