2017-02-16 58 views
1

當我按下click事件來添加數組值時,它給了我一個超出索引異常的錯誤。我想知道它爲什麼會發生,以及如何解決它,謝謝。索引超出範圍例外「examScores [countOfExams] = double.Parse(examScoresTextBox.Text);」

using System; 
using System.Windows.Forms; 


namespace ArrayTestCalculator 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 



     double total = 0; 
     double average = 0; 
     double scoreInput = 0; 
     int countOfExams = 0; 
     double[] examScores; 
     double count = 0; 
     //field array declare 


     private void enterBtn_Click(object sender, EventArgs e) 
     { 
      countOfExams = int.Parse(numOfExamsTextBox.Text); 
      examScores = new double[countOfExams]; 
      examLabel.Text = "Exam 1: "; 


      label1.Visible = false; 
      numOfExamsTextBox.Visible = false; 
      enterBtn.Visible = false; 

      examLabel.Visible = true; 
      examScoresTextBox.Visible = true; 
      addBtn.Visible = true; 


     } 



     private void addBtn_Click(object sender, EventArgs e) 
     { 
      examLabel.Text = "Exam " + (countOfExams +1) + ":"; 
      examScores[countOfExams] = double.Parse(examScoresTextBox.Text); 
      countOfExams++; 
      examScoresTextBox.ResetText(); 
      examScoresTextBox.Focus(); 


      if(countOfExams >= examScores.Length) 
      { 
       MessageBox.Show("hoise vaya"); 
      } 


     } 

     private void clearBtn_Click(object sender, EventArgs e) 
     { 
      Array.Clear(examScores, 0, examScores.Length); 
      ClearAll(); 
     } 
     private void exitBtn_Click(object sender, EventArgs e) 
     { 
      this.Close();      
     } 

     public void ClearAll() 
     { 
      examLabel.Text = "Exam:"; 
      examScoresTextBox.ResetText(); 
      numOfExamsTextBox.ResetText(); 

     } 
     private void calcBtn_Click(object sender, EventArgs e) 
     { 

     } 


    } 
} 

回答

1

在你enterBtn_Click的第一線,

countOfExams = int.Parse(numOfExamsTextBox.Text); 

我想你使用的是countOfExams作爲數組的總長度。

addBtn_Click的第二行之後,

examScores[countOfExams] = double.Parse(examScoresTextBox.Text); 
countOfExams++; 

我想你正在使用countOfExams跟蹤檢查的實際數量。由於countOfExams已被設置爲該長度,因此產生OutOfRangeException

因此,我建議你使用其他變量(如局部變量)的陣列的總長度,

var size = int.Parse(numOfExamsTextBox.Text); 
examScores = new double[size]; 
1

double [] examScores;如果它是由

double[] examScores = new double[<length>]; 

也初始化它已被定義爲數組,如果你不叫enterBtn_Click第一 理想的情況下這是從來沒有初始化,

你應該先初始化/檢查,計數器從0開始而不是1

如果你不能確定的長度或容量,使用列表

+0

謝謝,但我已經初始化enterBtn點擊事件中的數組。數組的長度取決於numOfExamsTextBox,這將是用戶輸入。 –

+0

如果考試數量靈活,爲什麼不使用List來代替數組? – A3006