C# 平均数组中的测验分数

C# 平均数组中的测验分数,c#,arrays,C#,Arrays,我又一次得到了一个无法完成的数组!我得到了填充和输入的信息,但我希望它也能给我整个quizgrade的平均值。基本上每次我向数组中添加测验分数时,我都希望它将它们加在一起,然后给出平均值。我没有好的想法,无法理解这一部分。有人能帮忙吗。感谢您的帮助!谢谢 给出一点历史: 此代码接受一个人的姓名、号码和等级,将其全部添加到数组中,然后在列表框中显示。然而,我也需要它来平均我放入数组中的分数,但我尝试过的任何东西都不起作用。下面是代码,也许有人能帮上忙 public partial class Fo

我又一次得到了一个无法完成的数组!我得到了填充和输入的信息,但我希望它也能给我整个quizgrade的平均值。基本上每次我向数组中添加测验分数时,我都希望它将它们加在一起,然后给出平均值。我没有好的想法,无法理解这一部分。有人能帮忙吗。感谢您的帮助!谢谢

给出一点历史: 此代码接受一个人的姓名、号码和等级,将其全部添加到数组中,然后在列表框中显示。然而,我也需要它来平均我放入数组中的分数,但我尝试过的任何东西都不起作用。下面是代码,也许有人能帮上忙

public partial class Form1 : Form
{

    public Form1()
    {
        InitializeComponent();
    }
    int[] quizGrade = new int[1];
    string[] studentName = new string[1];
    string[] studentNumber = new string[1];
    int numberOfEntries = 0;

    private void button1_Click(object sender, EventArgs e)
    {
        addToArray();
        txtStudentName.Clear();
        txtStudentNumber.Clear();
        txtQuizGrade.Clear();
        addArrayElementsToListbox();
    }
    public void addArrayElementsToListbox()
    {
        listBox1.Items.Clear();
        listBox1.Items.Add("Student Name \t Student Number \t Quiz Grade");
        for (int i = 0; i < studentName.Length; i++)
        {
            listBox1.Items.Add(studentName[i] + "\t" + studentNumber[i] + "\t\t" + quizGrade[i]);
        }
    }
    public void addToArray()
    {
        if (numberOfEntries == 0)
        {
            quizGrade[0] = Convert.ToInt32(txtQuizGrade.Text);
            studentName[0] = txtStudentName.Text;
            studentNumber[0] = txtStudentNumber.Text;
            numberOfEntries += 1;
        }
        else
        {
            numberOfEntries += 1;
            Array.Resize(ref quizGrade, numberOfEntries);
            Array.Resize(ref studentName, numberOfEntries);
            Array.Resize(ref studentNumber, numberOfEntries);
            quizGrade[numberOfEntries - 1] = Convert.ToInt32(txtQuizGrade.Text);
            studentName[numberOfEntries - 1] = txtStudentName.Text;
            studentNumber[numberOfEntries - 1] = txtStudentNumber.Text;
        }
    }
    public void txtAverage_TextChanged(object sender, EventArgs e)
        {
        }

    private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
        }

    private void ClearButton_Click(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
            txtStudentName.Clear();
            txtStudentNumber.Clear();
            txtQuizGrade.Clear();
            Array.Clear(studentName, 0,studentName.Length);
            Array.Clear(studentNumber, 0,studentNumber.Length);
            Array.Clear(quizGrade, 0,quizGrade.Length);
        }

}
公共部分类表单1:表单
{
公共表格1()
{
初始化组件();
}
int[]quizGrade=新int[1];
string[]studentName=新字符串[1];
字符串[]studentNumber=新字符串[1];
int numberOfEntries=0;
私有无效按钮1\u单击(对象发送者,事件参数e)
{
addToArray();
txtStudentName.Clear();
txtStudentNumber.Clear();
txtQuizGrade.Clear();
addArrayElementsToListbox();
}
public void addArrayElementsToListbox()
{
listBox1.Items.Clear();
列表框1.Items.Add(“学生姓名\t学生编号\t测验成绩”);
for(int i=0;i

}

您可以使用其中一个函数。

您可以执行Foreach循环并将其全部相加,然后除以条目数。如下图所示

int total = 0;

foreach(int a in quizGrade)
{
    total = total + a;
}
然后除以数组的总计数

total = total / numberOfEntries;

差不多吧。我希望这有帮助

首先,让我们将成绩记录捆绑在一起,以消除大部分复杂性

public class StudentQuizGrade {
    public string StudentName {get; set;}
    public string StudentNumber {get; set;}
    public int QuizGrade {get; set;}
}
我们正在删除重复阵列大小时出现的“不要重复您自己”错误。这让我们把你已经拥有的东西写下来

public partial class Form1 : Form
{

    public Form1()
    {
        InitializeComponent();
    }
    StudentQuizGrade [] quizGrades = new StudentQuizGrade [0];

    private void button1_Click(object sender, EventArgs e)
    {
        addToArray();
        txtStudentName.Clear();
        txtStudentNumber.Clear();
        txtQuizGrade.Clear();
        addArrayElementsToListbox();
    }
    public void addArrayElementsToListbox()
    {
        listBox1.Items.Clear();
        listBox1.Items.Add("Student Name \t Student Number \t Quiz Grade");
        foreach (StudentQuizGrade quizGrade in quizGrades)
        {
            listBox1.Items.Add(quizGrade.StudentName + "\t" + quizGrade.StudentNumber + "\t\t" + quizGrade.QuizGrade);
        }
    }
    public void addToArray()
    {
        Array.Resize(ref quizGrades, quizGrades.Count + 1);
        quizGrade[quizGrades.Count- 1] = new StudentQuizGrade() {
            QuizGrade = Convert.ToInt32(txtQuizGrade.Text);
            StudentName = txtStudentName.Text;
            StudentNumber = txtStudentNumber.Text;
        }
    }

    public void txtAverage_TextChanged(object sender, EventArgs e)
        {
        }

    private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
        }

    private void ClearButton_Click(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
            txtStudentName.Clear();
            txtStudentNumber.Clear();
            txtQuizGrade.Clear();
            Array.Clear(quizGrades, 0,quizGrades.Length);
        }

}
接下来,我们将清除数组更改时发生的重复操作。我们将通过在更改数组中的内容时添加要引发的事件来实现这一点。需要通知的内容可以添加到
QuizGradesChanged
,而更改
quizGrades
的内容应该调用
QuizGradesChanged()
。我们还将使用一个新方法,
clearadinputs()
重构并清除add输入,并删除一些不必要的方法

public delegate void EventHandler();

public partial class Form1 : Form
{
    public event EventHandler QuizGradesChanged;

    public Form1()
    {
        InitializeComponent();
        QuizGradesChanged += addArrayElementsToListbox;
    }
    StudentQuizGrade [] quizGrades = new StudentQuizGrade [0];

    private void button1_Click(object sender, EventArgs e)
    {
        addToArray();
        clearAddInputs();
    }

    private void clearAddInputs()
    {
        txtStudentName.Clear();
        txtStudentNumber.Clear();
        txtQuizGrade.Clear();
    }

    public void addArrayElementsToListbox()
    {
        listBox1.Items.Clear();
        listBox1.Items.Add("Student Name \t Student Number \t Quiz Grade");
        foreach (StudentQuizGrade quizGrade in quizGrades)
        {
            listBox1.Items.Add(quizGrade.StudentName + "\t" + quizGrade.StudentNumber + "\t\t" + quizGrade.QuizGrade);
        }
    }

    public void addToArray()
    {
        Array.Resize(ref quizGrades, quizGrades.Count + 1);
        quizGrade[quizGrades.Count- 1] = new StudentQuizGrade() {
            QuizGrade = Convert.ToInt32(txtQuizGrade.Text);
            StudentName = txtStudentName.Text;
            StudentNumber = txtStudentNumber.Text;
        }
        QuizGradesChanged();
    }

    private void ClearButton_Click(object sender, EventArgs e)
    {
        clearAddInputs();
        Array.Clear(quizGrades, 0,quizGrades.Length);
        QuizGradesChanged();
    }    
}
最后,我们可以添加测验分数的平均值。我们将有一个方法,
recreacteaverage()
,它重新计算平均值并将其显示在
txtAverage
控件中

    public Form1()
    {
        InitializeComponent();
        QuizGradesChanged += addArrayElementsToListbox;
        QuizGradesChanged += recalculateAverage
    }

    public void recalculateAverage() {
        if (quizGrades.Count > 0) {
           txtAverage.Text = quizGrades.Select(x => (decimal) x.QuizGrade).Average().ToString();
        } else {
           txtAverage.Text = "No grades to average";
        }
    }
编辑:数组。。。呃

里面可能有个bug

private void ClearButton_Click(object sender, EventArgs e)
{
    clearAddInputs();
    Array.Clear(quizGrades, 0,quizGrades.Length);
    QuizGradesChanged();
}
我更相信这是正确的:

private void ClearButton_Click(object sender, EventArgs e)
{
    clearAddInputs();
    quizGrades = new StudentQuizGrade[0];
    QuizGradesChanged();
}

你必须使用数组吗?为什么不做一些类似于
intavg=quizGrade.Sum()/quizGrade.Length?这将把它们加在一起,然后除以分数。免责声明我整晚都没睡,还没喝咖啡。LINQ为您提供了
.Average()
,它可以在
IEnumerable
上工作,您的数组就是它。@MyCodeSucks我尝试了您的代码,没有得到任何错误,但它不会发布到我的文本框中。avg=Convert.ToInt32(txtAverage.Text);如果你想将它添加到文本框中,在你做了avg之后,你必须将它分配到文本框中,所以类似于
txtAverage.Text=avg.ToString()
。我知道我发到这里已经有很长时间了,你们都帮助回答了问题,但我仍然想对大家说声谢谢!