-2
    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 = counteri = 0

    private void btnAverage_Click(object sender, EventArgs e)
    {

        for (int i = 0; i < counter; i++)
            MessageBox.Show("" + student[i].Average);
    }

然后我的程序可以工作,但它会根据输入的学生数量多次显示消息框,i最后一个值是正确的平均值。

我使用了一个名为Student来计算平均值的类。然而,这不是问题,因为正在显示正确的平均值。

我能做些什么来解决这个错误?

4

5 回答 5

3

首先,您似乎不需要循环,因为countercountercounter

其次,我怀疑你有一个错误。

如果你尝试这个会发生什么?

private void btnAverage_Click(object sender, EventArgs e)
{
    if (counter > 0)
        MessageBox.Show("" + student[counter-1].Average);
}
于 2013-03-14T09:34:27.457 回答
2

你的问题是student[counter]空的,而student[0]不是,所以我猜你的数组counter没有正确对齐。student

于 2013-03-14T09:34:28.803 回答
2

尝试

if (student.Length > 0)
{
    MessageBox.Show("" + student[student.Length - 1].Average)
}

没有循环 - 这将只显示数组中的最后一个平均值。

于 2013-03-14T09:34:55.680 回答
1

我相信问题是因为您试图访问没有实例的数组/集合中的项目(为什么会收到错误)。将 counter 设置为 0 有效,因为student[0]有一个Student.

如果只想获取一项,则不需要循环,可以student[i]通过传入数组的索引直接访问,即0.

MessageBox.Show("" + student[0].Average);
于 2013-03-14T09:34:22.807 回答
0

一种不易出错的方法是使用 aList<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);
    }
}
于 2013-03-14T09:50:22.987 回答