首页 > 解决方案 > C#编写一个函数来计算以对象数组为参数的平均年龄

问题描述

我必须创建一个函数来计算一个班级 50 名学生的平均年龄,这是我的代码

        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)
        {
            foreach(int i in student.age)
            {
                int avgage = (i += i) / 2;
            }
        }
        static void main (string[] args)
        {
          
        }

我得到一个错误说不能分配给“i”它是一个foreach迭代变量,任何其他方式我都可以为学生年龄初始化这个数组,因为我必须计算50个学生的平均年龄所以分配50个不同的时间感觉有点太多余的

我不知道以这种方式使用 foreach 时我在想什么,我现在已经将 foreach 与 for 循环交换,如下所示:

public void averageAge(Student student)
        {
            int avgage = 0;
            for (int i =0;i<50;i++)
            {
               avgage += student.age[i];
            }
            avgage /= 50;
        }

标签: c#arraysclassintegeraverage

解决方案


使用 Linq,您可以编写:

using System.Linq;

var student = new Student();

int averageAge = (int)student.age.Average();

https://docs.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 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();

一个学生的班级的每个实例都有几个年龄还是学生班级?


推荐阅读