2015-04-03 59 views
0

我有一個lstYourHand,它有兩張卡片,我通過列表框循環獲取兩張卡片的值。我獲取列表框項(strCardVal)的字符串值並使用開關給它一個整數值(intCardVal)。出於某種原因,當我運行代碼時,最後的消息框給我的值爲0,結果它沒有註冊我在switch語句中給它賦值。我的代碼如下:C#listbox錯誤

Int32 intCardVal = 0; 
String strCardVal; 


Int32 intLoopCounter1; 

for (intLoopCounter1 = 0; intLoopCounter1 == 1; intLoopCounter1++) 
{ 
    strCardVal = lstYourHand.SelectedItem.ToString(); 

    switch (strCardVal) 
    { 
     case "2": 
      intCardVal = 2; 
      break; 
     case "3": 
      intCardVal = 3; 
      break; 
     case "4": 
      intCardVal = 4; 
      break; 
     case "5": 
      intCardVal = 5; 
      break; 
     case "6": 
      intCardVal = 6; 
      break; 
     case "7": 
      intCardVal = 7; 
      break; 
     case "8": 
      intCardVal = 8; 
      break; 
     case "9": 
      intCardVal = 9; 
      break; 
     case "10": 
     case "J": 
     case "Q": 
     case "K": 
      intCardVal = 10; 
      break; 
     case "A": 
      intCardVal = 11; 
      break; 
    } 
} 

MessageBox.Show(intCardVal.ToString()); 
+1

你調試了你的代碼嗎? – 2015-04-03 15:32:03

+1

使用調試器可以很容易地解決這個問題。嘗試使用它並檢查strCardVal的值是什麼,然後進入交換機 – Steve 2015-04-03 15:32:27

+0

設置一個斷點並通過它;學習代碼如何執行;瞭解調試器的功能;利潤 – Plutonix 2015-04-03 15:32:33

回答

2

有一個在你的這部分代碼:

for (intLoopCounter1 = 0; intLoopCounter1 == 1; intLoopCounter1++) 

其實這個循環體中絕不會因循環執行條件intLoopCounter1 == 1(這是假的執行從開始的intLoopCounter1 == 0以來第一次迭代) - 所以你的intCardVal將不會被修改。

我想你已經記住了intLoopCounter1 <= 1這裏。

另外請注意(因爲它在評論中提到) - 這種錯誤很容易可以通過使用調試器找到。

+0

如果我改變我的循環爲(intLoopCounter1 = 0; intLoopCounter1 <= 1; intLoopCounter1 ++),然後我在這裏得到一個空引用錯誤strCardVal = lstYourHand.SelectedItem.ToString(); – Frank 2015-04-03 15:47:11

+1

@Frank這是另一個與循環無關的問題。它的原因是:'lstYourHand.SelectedItem'爲null(可能沒有在列表中選中)在你的代碼執行時刻,你不能調用'null'對象的方法。 – 2015-04-03 15:50:20