【问题标题】:c# for loop wrong number of iterationsc# for循环错误的迭代次数
【发布时间】:2013-07-02 22:21:52
【问题描述】:

我正在编写一个遍历 string[] 数组并将一些对象添加到列表中的函数。它是加载保存的游戏系统的一部分。它还有很多错误,因为我写了很多代码,之前可以测试任何一个。但是在这个调试阶段,我发现了一些奇怪的错误,无法解释或修复。
我无法访问某些数据。如果我有原始代码,for-loop 的迭代次数比需要的少 1 次。如果我将 +1 添加到迭代器限制,它会正常运行。总而言之,我可以迭代 -1 或 +1 次,但没有我需要的那么多。
这是原始代码,它的迭代次数比预期的少:

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

以下是捕获的异常截图:

【问题讨论】:

  • 您的 for 循环终点在整个循环中的更改是否符合预期?
  • 不,不是。我以为我只传递值,而不是函数

标签: c# for-loop iteration


【解决方案1】:

回复您的评论,

您可以将 for 循环视为以下内容

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


i++
}

每次迭代,while 循环中的检查将再次检查I 是否仍然小于一个值,这意味着在您的情况下,它每次迭代都会将“某物”转换为整数。 @competent_techs 解决方案会将其初始值存储到一个单独的变量中,然后该变量将只存储该值以供检查查看

【讨论】:

  • 非常感谢。现在我明白 for-loop 不是一种方法,而是一组打包的基本指令(用户级指令)。类似内联方法的东西。
【解决方案2】:

问题是循环结束测试 (k) 中使用的变量在循环内递增。

将循环更改为以下内容应该可以解决问题:

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

【讨论】:

  • 我应该更多地凭直觉而不是等待 OP 提供更多信息; +1
  • U 的意思是 for 循环检查 i
  • @user1742303 - 我已经添加了解释的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 2013-12-14
  • 2010-12-28
  • 2012-10-27
  • 2012-08-07
  • 2014-08-24
  • 2012-01-05
相关资源
最近更新 更多