2015-03-19 3 views
-1

У меня возникла проблема с назначением, я не могу очистить массив. Также в моем MessageBox, когда он отображает оценки, я получаю нуль как первое число, независимо от того, что я делаю. Я не могу понять, что изменить, так что ноль не является первым элементом.Очистка массива

public partial class Form1 : Form 
{ 
    int scoreTotal = 0; 
    int scoreCount = 0; 
    decimal average = 0; 
    int[] scoreTotalArray = new int[1]; 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void btnAdd_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      if (IsValidData()) 
      { 
       Int32 score = Convert.ToInt32(txtScore.Text); 
       scoreTotalArray[scoreCount] = score; 
       Array.Resize(ref scoreTotalArray, scoreTotalArray.Length + 1); 
       scoreTotal += score; //accumulator 
       scoreCount++; //counter 
       average = scoreTotal/(decimal)scoreCount;//average 

       txtScoreCount.Text = scoreCount.ToString();//display in score count txtbox 
       txtScoreTotal.Text = scoreTotal.ToString(); //display in score total txtbox 
       txtAverage.Text = average.ToString("n2"); //display in average text box 

       txtScore.Clear(); 
       txtScore.Focus(); 
      } 
     } 
     catch (Exception ex) //catches all other exceptions 
     { 
      MessageBox.Show(ex.Message, ex.GetType().ToString()); 
     } 
    } 

    public bool IsValidData() 
    { 
     return 
      IsPresent(txtScore, "Score:") && 
      IsInt32(txtScore, "Score:") && 
      IsWithinRange(txtScore, "Score:", 0, 100); 
    } 

    public bool IsPresent(TextBox textBox, string name) 
    { 
     if (textBox.Text == "") 
     { 
      MessageBox.Show(name + " is a required field, please enter a number between 0 and 100.", "Entry Error"); 
      textBox.Focus(); 
      return false; 
     } 
     return true; 
    } 

    public bool IsInt32(TextBox textBox, string name) 
    { 
     try 
     { 
      Convert.ToInt32(textBox.Text); 
      return true; 
     } 
     catch (FormatException) 
     { 
      MessageBox.Show(name + "must be a number between 0 and 100.", "Entry Error"); 
      textBox.Focus(); 
      return false; 
     } 
    } 

    public bool IsWithinRange(TextBox textBox, string name, decimal min, decimal max) 
    { 
     decimal number = Convert.ToDecimal(textBox.Text); 
     if (number < min || number > max) 
     { 
      MessageBox.Show(name + " must be between " + min + " and " + max + ".", "Entry Error"); 
      textBox.Focus(); 
      return false; 
     } 
     return true; 
    } 

    private void btnDisplayScore_Click(object sender, EventArgs e) 
    { 
     Array.Sort(scoreTotalArray); 
     string scoreCountString = "\n"; 
     for(int i = 0; i < scoreCount; i++) 
     scoreCountString += scoreTotalArray [i] + "\n"; 

     MessageBox.Show(scoreCountString + "\n", "Sorted Scores"); 
    } 

    private void btnClearScores_Click(object sender, EventArgs e) 
    { 
     txtScore.Clear(); 
     txtScoreTotal.Clear(); 
     txtScoreCount.Clear(); 
     txtAverage.Clear(); 

     txtScore.Focus(); 
    } 
+1

Очистить массив? Или очистить MessageBox? Можете ли вы прояснить проблему и сузить место, где, по вашему мнению, проблема заключается во всем этом коде? –

+0

О, извините, мне нужно очистить окно сообщения, но также и сохраненные в нем данные, поэтому, если пользователь нажимает кнопку «clear scores», то они могут начать все заново, и это не просто добавление к результатам введенный ранее. – Ladybrinx

ответ

2

Ваш массив int scoreTotalArray всегда является одним из элементов большого. Этот дополнительный элемент содержит 0 Вы хотите, чтобы избавиться от ;-)

Расчетной баллов может быть сделано путем изменения размера массива в 0.

Это сказал: Вы, вероятно, следует рассмотреть возможность использования List вместо междунар массив.

+0

Нам не разрешено использовать список, мы должны использовать массив, поэтому я застреваю, пытаясь понять это. Итак, где бы я поместил код для его изменения? Он уже там один раз, не уверен, куда еще он должен пойти – Ladybrinx

+0

в 'btnClearScores_Click', вы должны добавить:' Array.Resize (ref scoreTotalArray, 0); ' Установите' scoreTotal', 'scoreCount' и' average' to ' 0'. Заменить это: 'int [] scoreTotalArray = new int [1];' с этим: 'int [] scoreTotalArray = new int [0];' И в 'btnAdd_Click', переключите порядок этих двух строк: 'scoreTotalArray [scoreCount] = score;' 'Array.Resize (ref scoreTotalArray, scoreTotalArray.Length + 1);' – KompjoeFriek

+1

Вероятно, вы также должны использовать 'scoreTotalArray.Length' вместо' scoreCount'. Помните, что последний элемент в массиве - 'array [array.Length - 1]'. –

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