2013-03-14 155 views
-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); 
    } 

我的計劃是給我的錯誤:對象引用不設置到對象錯誤的實例

Object reference not set to an instance of an object.

我只希望循環運行一次只顯示最後計算平均。如果我這樣做: 即:改變int i = counteri = 0

private void btnAverage_Click(object sender, EventArgs e) 
    { 

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

然後我的程序工作,但它顯示在MessageBox多次根據所輸入的學生i量,與上次值是正確的平均值。

我用一個叫做Student的類來計算平均值。但這不是問題,因爲正在顯示正確的平均值。

我能做些什麼來解決這個錯誤?

+1

請您的具體問題,更新您的標題..閱讀[問] – 2013-03-14 09:31:43

+1

什麼是完整的堆棧跟蹤? *不只是消息,整個事情,不要吝嗇細節。 – Arran 2013-03-14 09:33:13

+0

1.你有沒有設置任何斷點並得到未定義的變量? 2.哪裏定義了「counter」? – 2013-03-14 09:33:53

回答

3

首先,你似乎並不需要一個循環,因爲counter會從countercounter

其次,我懷疑你有一個out-by-one的錯誤。

如果您嘗試此操作,會發生什麼情況?

private void btnAverage_Click(object sender, EventArgs e) 
{ 
    if (counter > 0) 
     MessageBox.Show("" + student[counter-1].Average); 
} 
+0

這個作品!非常感謝你!! – 2013-03-14 09:39:15

1

我認爲這個問題是因爲你試圖訪問沒有實例的數組/集合中的一個項目(爲什麼你會收到錯誤)。將計數器設置爲0的原因是student[0]的實例爲Student

如果你只想得到一個項目,你不需要一個循環,你可以通過傳入數組的索引直接訪問student[i],即0

MessageBox.Show("" + student[0].Average); 
+1

如果學生是典型的.net數組或陣列列表,則該錯誤將與超出界限索引相關。 – 2013-03-14 09:38:24

+0

更有可能數組聲明爲...很大,並且OP正試圖訪問已存在的索引,但尚未分配該索引。 – 2013-03-14 09:41:41

+0

@ J.Steen - 是的,這是我在我的回答中試圖解釋的。我編輯過,試圖澄清這一點。 – 2013-03-14 09:43:47

2

您的問題是student[counter]爲空,而student[0]是不是,所以我想你counter沒有正確與student陣列對準。

2

嘗試

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

沒有循環 - 這將只顯示數組中的最後平均值。

+0

如果'student.Length == 0'會崩潰 – Nolonar 2013-03-14 09:59:35

+0

好點...更新回答 – 2013-03-14 10:02:49

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); 
    } 
} 
+0

感謝,但實際是由我們的講師授予我們的,並且要求使用對象數組編寫它... – 2013-03-14 09:54:49

相關問題