有什么建议可以跟踪并避免循环中的错误?

Yor*_*iev 2 loops for-loop while-loop

我刚刚发现......再次......一个实时浪费的错误如下

for (int i = 0; i < length; i++)
{ //...Lots of code 
    for (int j = 0; i < length; j++)
    {
        //...Lots of code 
    }
}
Run Code Online (Sandbox Code Playgroud)

你有没有注意到内在的那个应该是j?我也没有.所以从现在开始我将使用:

for (int i = 0; i < length; i++)
{
    for (int i1 = 0; i1 < length; i1++)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

对于内部和外部while和for循环,您有什么提示?

编辑:感谢您的宝贵回复.以下是建议提示的简短摘要:

  • 为索引变量使用有意义的变量名称(而不是使用SomeObjCollectionLength)
  • 将内部循环的内容放入一个单独的方法,并从外部循环调用该方法
  • 外部和内部循环之间不可管理的代码行数是代码气味的强烈信号
  • 避免复制粘贴和匆忙,小心写下索引变量

你可能想通过检查总结LBushkin以下

  • 尽可能使用foreach和迭代器
  • 在进入循环之前初始化变量
  • 使每个循环只执行一个功能.避免在一个循环中混合责任
  • 如果可能,请使您的循环足够短以便一次查看所有循环

Nav*_*een 7

不要使用i&j(或任何其他单字母变量)作为索引名称.使用正确的名称,你不会陷入这种类型的问题.


Mar*_*ark 6

最简单和最干净的解决方案之一是将内循环的内容放入方法中,使其变为:

for (int i = 0; i < length; i++)
{
    DoSomething();
}

private void DoSomething(int outerValue)
{
    for (int i = 0; i < length; i++)
    {
        // Do something else
    }

}
Run Code Online (Sandbox Code Playgroud)

  • 我个人认为i&j是众所周知的循环变量,因此可以在for循环中使用它们而不会损失可读性,特别是因为有时可能很难找到好的循环变量名.但是,我确实经历了使用"loopy"作为我的循环变量名称的阶段.啊,黑客代码时我们用来娱乐自己的简单事情;) (3认同)