C#编写一个函数来计算平均年龄,该函数以对象数组作为参数。

9 浏览
0 Comments

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;
}

0
0 Comments

问题的原因是提问者想要编写一个函数来计算平均年龄,该函数将接受一个对象数组作为参数。然而,提问者最初给出的代码并没有实现这个功能。

解决方法是提供了一个包含所需功能的新代码示例。该代码示例使用了C#的LINQ库来计算学生的平均年龄。在示例中,首先创建了一个ClassRoom类,该类包含一个名为Students的学生列表。然后,通过循环向ClassRoom的Students列表中添加了10个年龄在18到30之间的随机学生对象。最后,使用LINQ的Average函数计算了学生年龄的平均值,并将结果输出到控制台。

这个新的代码示例提供了一个简洁而有效的解决方法,可以用来计算学生年龄的平均值。这样,提问者可以根据自己的需求进行修改和使用。

0
0 Comments

问题的出现原因:

问题的出现是因为需要计算一个学生数组的平均年龄,但需要将学生数组作为参数传递给函数进行计算。给出的代码片段中提供了一种使用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`来存储年龄。另外,还可以为每个学生创建一个`Student`类,并使用`List`来管理学生集合。在这种情况下,`Student`类应包含`Age`、`Name`等属性,而`Students`集合可以具有`AverageAge`属性,以及管理学生列表所需的其他属性和方法。

根据问题的要求,最好创建一个名为`studentsAges`的类,该类具有一个数组数据字段`ages`,该字段是所有学生年龄的集合。然后将`studentsAges`类的对象作为参数传递给计算平均年龄的函数中。

0