2017-02-16 2 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; был определен как массив, который никогда не был инициализирован, если вы не вызывая enterBtn_Click первый идеале,

Вы должны сначала инициализировать/проверить, если он инициализируется его

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

также счетчик начинается с 0 а не 1

Если вы не уверены о длине или мощности, использование списка

+0

Спасибо, но я инициализируюсь массив внутри события enterBtn щелчка. Длина массива зависит от numOfExamsTextBox, который будет пользователем. –

+0

Если количество экзаменов, если они гибкие, почему бы не использовать List вместо массива? – A3006

Смежные вопросы