每当我调用此函数时,Unity 不再响应



如果我通过按钮调用这个函数,我总是必须通过任务管理器关闭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,所以它并没有做太多工作,函数处理也没有完成。

有人知道哪里出了问题,或者我应该改变什么吗?

冻结通常意味着某个地方有一个永不结束的循环。

所有的循环都是有限的,除了一个之外,没有什么比几毫秒长的了!

你有

for(int s = 0; s < 9; s++)
{
if(p == Reihe * 9 - 9 + s)
{
s = Spalte;
}
}

其中重新分配s = 0,因为Spalte从未以不同方式分配。因此,重新启动循环,如果这个条件满足一次,那么在未来的迭代中肯定也会满足,因为该循环中的其他参数都没有变化=>永不结束的循环。

从你的代码的其余部分来看,它可能应该是

Spalte = s;

最新更新