这是我的方法,它只是一个嵌套循环:
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'计数器改变了,所有东西都炸毁了! 这是我的日志:
我听不懂是怎么回事!
答案 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 z < st.Length
,从而结束该循环j
增至26
z
初始化为j+1
(27)z < st.Length
-否。退出循环而不用输入任何内容i < st.Length
-true,然后进入循环。j
递增