2013-07-04 47 views
2

我正在寫一個函數,它遍歷字符串[]數組並將一些對象添加到列表中。它是加載保存的遊戲系統的一部分。它還有很多bug,因爲我寫了很多代碼,然後才能測試它。但在這個調試階段,我發現了一些奇怪的錯誤,無法解釋或修復。
我無法訪問一些數據。如果我有原始代碼,for循環迭代次數少於1次。如果我將迭代器限制值加1,則它正常工作。總之,我可以迭代-1或+1次,但不是我所需要的。
這是原來的代碼,它迭代一個時間低於預期:c#for循環錯誤的迭代次數

string str = " start at " + Convert.ToInt32(s[k]) + " " + k; 
     for (int i = 0; i < Convert.ToInt32(s[k]); i++) 
     { 
      k++; 
      landOwned.Add(setle.civil.land[Convert.ToInt32(s[k]), Convert.ToInt32(s[k+1])]); 
      k++; 
      str += " iteration "+i + " finish " + k; 
     } 
     throw new ArgumentException(str); 

這是在文本文件中的行:

f 4894 0 250 -523058 0 0 0 0 0 0 0 0 0 0 0 0 0 35 35 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 3 4 2 4 3 3 4 4 1 0 1 0 1 0 1 2 

下面是所產生的異常截圖逮住:

enter image description here

+3

你的for循環終點變化是整個循環的目的? – Sayse

+0

不,它不是。我認爲我只通過價值,而不是函數 – Kiaurutis

回答

6

問題是,在循環結束測試(k)中使用的變量在循環中增加。

改變環路到以下應解決的問題:

var endIndex = Convert.ToInt32(s[k]); 
    for (int i = 0; i < endIndex; i++) 
+1

我應該更多地從直覺上去理解本能,而不是等待更多的OP; +1 – Sayse

+0

U意味着循環檢查我每次迭代 Kiaurutis

+0

@ user1742303 - 我已經添加了一個解釋 – Sayse

2

在回答您的意見,

,你可以把一個for循環以下

int i = 0; 
while(i < something){ 
//... 


i++ 
} 

每次迭代,while循環內的檢查將再次檢查,看看I是否仍然小於一個值,這意味着在你的情況下,它正在轉換「東西「每次迭代轉換爲整數。 @competent_techs解決方案將這個初始值存儲到一個單獨的變量,然後將存儲檢查的值看看

+1

的答案非常感謝。現在我明白,for循環不是一種方法,而是一組基本指令(用戶級別指令)。像內聯方法。 – Kiaurutis