private void btnAddStudent_Click(object sender, EventArgs e)
{
student[counter] = new Student(txtStudentName.Text, txtStudentSurname.Text, int.Parse(txtExamMark.Text), counter);
counter++;
}
private void btnAverage_Click(object sender, EventArgs e)
{
for (int i = counter; i <= counter; i++)
MessageBox.Show("" + student[i].Average);
}
我的程序给了我错误:
对象引用未设置为对象的实例。
我只希望循环运行一次才能显示最后计算的平均值。如果我这样做:
即:将int i = counter
更改为i = 0
private void btnAverage_Click(object sender, EventArgs e)
{
for (int i = 0; i < counter; i++)
MessageBox.Show("" + student[i].Average);
}
然后我的程序可以运行,但根据输入的i
学生数量,它会多次显示消息框,最后一个值是正确的平均值。
我使用了一个名为Student
的类来计算平均值。然而,这不是问题,因为正在显示正确的平均值。
我该怎么做才能解决此错误?
答案 0 :(得分:3)
首先,由于counter
从counter
转到counter
,您似乎不需要循环。
其次,我怀疑你有一个错误。
如果你试试这会怎么样?
private void btnAverage_Click(object sender, EventArgs e)
{
if (counter > 0)
MessageBox.Show("" + student[counter-1].Average);
}
答案 1 :(得分:2)
您的问题是student[counter]
为空,而student[0]
不是,所以我猜您的counter
未与student
数组正确对齐。
答案 2 :(得分:2)
尝试
if (student.Length > 0)
{
MessageBox.Show("" + student[student.Length - 1].Average)
}
没有循环 - 只显示数组中的最后一个平均值。
答案 3 :(得分:1)
我认为问题是因为您正在尝试访问没有实例的数组/集合中的项目(为什么您收到错误)。将计数器设置为0有效,因为student[0]
的实例为Student
。
如果您只想获得一个项目,则不需要循环,您可以通过传入数组的索引直接访问student[i]
,即0
。
MessageBox.Show("" + student[0].Average);
答案 4 :(得分:0)
不易出错的方法是使用List<T>
而不是数组:
List<Student> students = new List<Student>();
private void btnAddStudent_Click(object sender, EventArgs e)
{
students.Add(Student(txtStudentName.Text, txtStudentSurname.Text,
int.Parse(txtExamMark.Text), counter);
counter++;
}
private void btnAverage_Click(object sender, EventArgs e)
{
if(students.Any())
{
MessageBox.Show("" + students.Last().Average);
}
}