for循环迭代器突然改变

时间:2019-06-28 10:22:21

标签: c# unity3d

这是我的方法,它只是一个嵌套循环:

IEnumerator startNewRound()
{
    string st = "آبپتثجچحخدذرضطظعغفقکگلمنوهی";
    for (int i = 0; i < st.Length; i++)
    {
        for (int j = i + 1; i < st.Length; j++)
        {
            for (int z = j + 1; z < st.Length; z++)
            {
                if (z > st.Length) continue;
                yield return new WaitForSeconds(0.1f);
                Debug.Log("I = " + i + " J = " + j + " Z= " + z);
            }
        }
    }
}

突然,循环程序内部冻结了几秒钟,并且'j'计数器改变了,所有东西都炸毁了! 这是我的日志:

enter image description here

我听不懂是怎么回事!

1 个答案:

答案 0 :(得分:11)

在第二个嵌套循环中,您错误地使用i而不是j作为循环控制变量:

for (int j = i + 1; i < st.Length; j++)

应该是

for (int j = i + 1; j < st.Length; j++)

为什么这会引起问题?让我们看一下utput的相关部分:

  

I = 0 J = 24 Z = 25
  I = 0 J = 24 Z = 26
  I = 0 J = 25 Z = 26
  I = 0 J = 2147483647 Z = -2147483648
  I = 0 J = 2147483647 Z = -2147483647
  I = 0 J = 2147483647 Z = -2147483646

在您的代码达到I = 0,J = 25&z = 26(比st的长度小一)的时候,将发生以下情况:

  • z增至27
  • 第3个循环中的测试检查z < st.Length,从而结束该循环
  • j增至26
  • 第三个循环将z初始化为j+1(27)
  • 第三个循环评估z < st.Length-否。退出循环而不用输入任何内容
  • 第二个循环计算i < st.Length-true,然后进入循环。
  • 该循环j递增
  • 无限连续广告,直到整数溢出