2016-05-15 60 views
0

我正在研究c#visual studio中的一個項目,其中我試圖製作一個保齡球計算器。我爲包含throw1和throw2的幀做了一個類。我首先用一個按鈕填充一組類,並在遊戲完成後計算分數。當我去計算分數它告訴我我有空值。以下是我的表單代碼類是 類框架 { public int intThrow1; public int intThrow2; }C#保齡球計算器。返回null的數組數組

的主要形式是

public partial class Form1 : Form 
{ 
    frames[] frame = new frames[11]; 

    public Form1() 
    { 


     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 

    } 

    private void button1_Click(object sender, EventArgs e) 
    { 

     int intFrst = int.Parse(textBox1.Text); 
     int intScnd = int.Parse(textBox2.Text); 
     if (lbxScorecard.Items.Count <= 21) 
     { 
      int intIndx = 0; 
      if (intFrst == 10) 
      { 
       frame[intIndx] = new frames(); 
       frame[intIndx].intThrow1 = intFrst; 
       frame[intIndx].intThrow2 = 0; 
       lbxScorecard.Items.Add(frame[intIndx].intThrow1); 
       lbxScorecard.Items.Add(frame[intIndx].intThrow2); 
       intIndx += 2; 
      } 
      else 
      { 
       frame[intIndx] = new frames(); 
       frame[intIndx].intThrow1 = intFrst; 
       frame[intIndx].intThrow2 = intScnd; 
       lbxScorecard.Items.Add(frame[intIndx].intThrow1); 
       lbxScorecard.Items.Add(frame[intIndx].intThrow2); 
       intIndx++; 

      } 
     } 
     else 
     { 
      MessageBox.Show("max throws"); 
     } 




    } 

    private void button2_Click(object sender, EventArgs e) 
    { 

     int intScore = 0; 

     for (int index = 0; index <= 11; index++) 
     { 

      if (frame[index].intThrow1 == 10 && index < 9) // here is where it throws a null exception stating the index may be empty 
      { 
       if (frame[index + 1].intThrow1 != 10) 
       { 
        intScore = intScore + frame[index].intThrow1 + frame[index + 1].intThrow1 + frame[index + 1].intThrow2; 
       } 
       else if (frame[index].intThrow1 == 10) 
       { 
        intScore = intScore + frame[index].intThrow1 + frame[index + 1].intThrow1 + frame[index + 2].intThrow1; 
       } 
      } 
      else if (frame[index].intThrow1 + frame[index].intThrow2 == 10 && index < 9)  //it was throwing the same exception here until i added && index<9 in the if statements. 
      { 
       intScore = intScore + frame[index].intThrow1 + frame[index].intThrow2 + frame[index + 1].intThrow1; 
      } 
      else 
      { 
       intScore = intScore + frame[index].intThrow1 + frame[index].intThrow2; 
      } 

     } 
     MessageBox.Show(intScore.ToString()); 
    } 
} 

回答

0

問題是:

frames[] frame = new frames[11]; 

您還需要實例化陣列中的每個元素就像你在button1_Click功能所做的:

frame[intIndx] = new frames(); 

另請注意,您有一個類變量framebutton2_Click中的相同,這可能是一個壞主意。

+0

謝謝你的迴應。我認爲陣列需要有一個最大幀數的限定。也不會我的循環與索引計數器實例化每個按鈕點擊一個新的框架[索引]? – abrunette89

+0

你在'button1_Click'中的循環會這樣做。但正如我所說的,因爲你在'button2_Click'內再次聲明'frame' **,那麼你不使用在'button1_Click'內初始化的類變量'frame'。 – Idos

+0

噢,是的,我忘了刪除之前,我發佈它我得到的錯誤之前,並認爲這將修復它大聲笑然後我來到這裏 – abrunette89