2014-02-27 38 views
0

我再次找不到自己的解決方案(我嘗試使用Array.IndexOf(db,accnum),pos> -1返回布爾值,但在我無法執行後恢復到此循環不會使它工作)。 所以,我認爲使用db.Length會在數組中所有非null元素的長度上留下'a',但它似乎計算整個數組,這意味着當循環到達空元素時它會導致錯誤。當數組中的對象用完時,有沒有辦法停止循環計數?如何確定數組中的對象

void withdrawal() 
{ 
    int accnum; 
    double withdrawal; 

    //get and parse input details 
    accnum = int.Parse(tbNameEnt.Text); 
    withdrawal = double.Parse(tbBalaEnt.Text); 

    //check if account exists within existing objects 
    int a = db.Length; 
    for (int i = 0; i < a; i++) 
    { 
     if (db[i].GetAccNo() == accnum) 
     { 
      pos = i; 

      //deduct from balance 
      db[pos].SetBalance(db[pos].GetBalance() - withdrawal); 

      WithMess(); //success message 
      hide_form(); 
      MakeWith2.Visible = false; 
      show_menu(); 
      break; 
     } 

     else if ((db[i].GetAccNo() != accnum) && (i == db.Length - 1)) 
     { 
      //account doesn't exist message 
      MessageBox.Show("Account does not exist"); 
     } 
    } 
} 
+0

我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –

+0

爲什麼要使用數組?爲什麼不使用集合,在這種情況下不會有「空」項目?您可以添加和刪除,集合將會增長和縮小。 – jmcilhinney

回答

1

如果有墊陣列..打破的循環,當你到達一個空項目:

for (int i = 0; i < a; i++) { 
    if (db[i] == null) 
     break; 
    // the rest 

或者,使用LINQ過濾空出的物品:

foreach (var item in db.Where(x => x != null)) { 
    // loop here 
} 
相關問題