【发布时间】:2022-01-21 01:33:47
【问题描述】:
如果我通过按钮调用此功能,我总是必须通过任务管理器关闭 Unity,我的代码有什么问题?我知道此代码需要进行大量处理,但该过程永远不会完成:
public void SudokuLösen()
{
for(int p = 1; p < 81; p++)
{
if(PositionWert[p] != 0){
for(int z = 1; z < 9; z++)
{
if(PositionWert[p] == z)
{
int Reihe = 0;
int Spalte = 0;
int Platz = 0;
for(int m = 0; m < 8; m++)
{
for(int r = 1; r < 9; r++)
{
if(p - m * 9 == r)
{
Reihe = r;
}
}
}
for(int s = 0; s < 9; s++)
{
if(p == Reihe * 9 - 9 + s )
{
s = Spalte;
}
}
for(int g = -8; g < 8; g++)
{
if((Spalte + g > 0) && (Spalte + g < 10))
{
Blockiert[(p + z * 81 - 81) + g] = true;
}
if((Reihe + g > 0) && (Reihe + g < 10))
{
Blockiert[(p + z * 81 - 81) + g * 9] = true;
}
}
for(int vx = 1; vx < 3; vx++)
{
if((Spalte == 0 + vx) || (Spalte == 3 + vx) || (Spalte == 6 + vx))
{
Platz += vx;
}
if((Reihe == 0 + vx) || (Reihe == 3 + vx) || (Reihe == 6 + vx))
{
Platz += (3 * vx - 3);
}
}
for(int q = 1; q < 4; q++)
{
Blockiert[(p + z * 81 - 81) + Quadrat[Platz * 4 - 4 + q]] = true;
}
}
}
}
}
}
}
数组的定义如下:
public static bool[] Blockiert = new bool[730];
public static int[] PositionWert = new int[82];
private int[] Quadrat = {0, 10, 11, 19, 20, 8, 10, 17, 19, 7, 8, 16, 17, -8, -7, 10, 11, -10, -8, 8, 10, -11, -10, 7, 8, -17, -16, -8, -7, -19, -17, -10, -8, -20, -19, -11, -10};
我认为这可能只是因为我的计算机会永远调用这个函数,所以我等了很长时间,发现 Unity 几乎使用了我 15% 的 CPU,所以它并没有真正做太多事情和函数处理只是没有完成。
有谁知道哪里出了问题或我应该改变什么?
【问题讨论】:
-
这可能需要很长时间,但应该会完成。附加 Visual Studio 并暂停执行以检查它是否仍在运行。您也可以使用断点。检查文档Debugging C# code in Unity
-
好的,如果是这样,那么我应该改变什么以使其更快,因为这不会花费很长时间
-
我在
s = Spalte;看到对您的循环索引的重新分配。你认为你有一个无限循环吗?请包括minimal reproducible example