对象引用不设置到对象错误的实例
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);
}
我的计划是给我的错误:对象引用不设置到对象错误的实例
Object reference not set to an instance of an object.
我只希望循环运行一次只显示最后计算平均。如果我这样做: 即:改变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);
}
然后我的程序工作,但它显示在MessageBox多次根据所输入的学生i
量,与上次值是正确的平均值。
我用一个叫做Student
的类来计算平均值。但这不是问题,因为正在显示正确的平均值。
我能做些什么来解决这个错误?
首先,你似乎并不需要一个循环,因为counter
会从counter
到counter
。
其次,我怀疑你有一个out-by-one的错误。
如果您尝试此操作,会发生什么情况?
private void btnAverage_Click(object sender, EventArgs e)
{
if (counter > 0)
MessageBox.Show("" + student[counter-1].Average);
}
这个作品!非常感谢你!! – 2013-03-14 09:39:15
我认为这个问题是因为你试图访问没有实例的数组/集合中的一个项目(为什么你会收到错误)。将计数器设置为0的原因是student[0]
的实例为Student
。
如果你只想得到一个项目,你不需要一个循环,你可以通过传入数组的索引直接访问student[i]
,即0
。
MessageBox.Show("" + student[0].Average);
如果学生是典型的.net数组或阵列列表,则该错误将与超出界限索引相关。 – 2013-03-14 09:38:24
更有可能数组声明为...很大,并且OP正试图访问已存在的索引,但尚未分配该索引。 – 2013-03-14 09:41:41
@ J.Steen - 是的,这是我在我的回答中试图解释的。我编辑过,试图澄清这一点。 – 2013-03-14 09:43:47
您的问题是student[counter]
为空,而student[0]
是不是,所以我想你counter
没有正确与student
阵列对准。
尝试
if (student.Length > 0)
{
MessageBox.Show("" + student[student.Length - 1].Average)
}
没有循环 - 这将只显示数组中的最后平均值。
如果'student.Length == 0'会崩溃 – Nolonar 2013-03-14 09:59:35
好点...更新回答 – 2013-03-14 10:02:49
一个不太容易出错的方法是使用一个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);
}
}
感谢,但实际是由我们的讲师授予我们的,并且要求使用对象数组编写它... – 2013-03-14 09:54:49
请您的具体问题,更新您的标题..阅读[问] – 2013-03-14 09:31:43
什么是完整的堆栈跟踪? *不只是消息,整个事情,不要吝啬细节。 – Arran 2013-03-14 09:33:13
1.你有没有设置任何断点并得到未定义的变量? 2.哪里定义了“counter”? – 2013-03-14 09:33:53