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