2014-03-26 53 views
0

我想檢查數組中的值,如果存在返回值else返回消息並從數組中讀取另一個值。添加如何添加條件到循環

else 
    { 
     MessageBox.Show("This Item ID Does Not Exist"); 
    } 

但問題是當該值不在數組中時,它想要顯示的消息爲1258038次。 我怎麼檢查值(輸入),如果它存在,我可以繼續,如果它不存在陣列,它返回並讀取另一個值(輸入可以是幾個值,必須逐個讀取)


for (int cun = 0; cun < ItemIdNumber.Length; cun++) 
    { 
     int Item_Id = Convert.ToInt32(ItemIdNumber[cun]); 
     for (int yyu = 0; yyu <= 1258038; yyu++) 
     { 
     int weer = c[yyu]; 
     if (weer == Item_Id) 
     { 
      itemseq = yyu; 
     } 
     else 
     { 
      MessageBox.Show("This Item ID Does Not Exist"); 
     } 
     } 

     float[] i_ff = b[itemseq]; 
     for (int ii = 0; ii < i_ff.Length; ii++) 
     { 
    ....... 
+0

邊注:請儘量與其他人共享代碼使用良好的變量名/方法名。 'ii'和'yyu' *可能給人一種印象,即你不關心你的代碼。 –

+0

好像我的帖子是無敵的..-.- –

回答

2

使用break可以儘早離開循環。你還需要改變你的邏輯,所以你不會在每次迭代中顯示一條消息。這只是一種可能性:

int? itemseq = null; 

for (...) // outer loop 
{ 
    ... 
    for (...) // inner loop 
    { 
     if (weer == Item_Id) 
     { 
      itemseq = yyu; 
      break; 
     } 
    } 

    if (!itemseq.HasValue) 
     MessageBox.Show("This Item ID Does Not Exist"); 

    ... 
} 

我覺得有一點點想法,你可以讓這個更具可讀性。

  1. 您有兩個搜索集合 - ItemIdNumberc
  2. 您正在尋找ItemIdNumber中的第一個值,它與c的前1258038個值中的項目相匹配。

類似這樣的LINQ聲明也許,雖然我不完全確定你的收藏是什麼類型。而且我正在寫這個免費版本,所以它可能不會按原樣編譯。應該給你一些工作,但。

var id = (from id in ItemIdNumber 
      join cid in c.Take(1258038) on Convert.ToInt32(id) equals cid 
      select cid).FirstOrDefault(); 

if (!id.HasValue) 
    MessageBox.Show("This Item ID Does Not Exist"); 
+0

也許在這種情況下,當item_id不存在於數組中時,消息仍然會顯示1258038次.. –

+0

yeap @YohanesKhosiawan許先漢。它顯示了1258038次的錯誤。 – user3446681

+0

它仍然顯示1258038次錯誤@GrantWinney – user3446681

0
for (int cun = 0; cun < ItemIdNumber.Length; cun++) { 
    ... 

    boolean found = false;  

    for (int yyu = 0; yyu <= 1258038; yyu++) { 
     int weer = c[yyu]; 
     if (weer == Item_Id) 
     { 
      itemseq = yyu; 
      found = true; 
      break; 
     } 
    } 
    if(!found) { 
     MessageBox.Show("This Item ID Does Not Exist"); 
    } 

    ... 
}