如果我通過按鈕呼叫此功能,我總是必須通過任務管理器關閉 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 幾乎使用了我 CPU 的 15%,所以它并沒有真正做太多,函式處理也沒有'完成。
有誰知道出了什么問題或我應該改變什么?
uj5u.com熱心網友回復:
凍結通常意味著您在某處有一個永無止境的回圈。
你所有的回圈都是有限的,沒有什么需要超過幾毫秒的時間——除了一個!
你有
for(int s = 0; s < 9; s )
{
if(p == Reihe * 9 - 9 s)
{
s = Spalte;
}
}
你重新分配的地方,s = 0因為Spalte從來沒有以不同的方式分配過。所以你重新啟動回圈,如果這個條件滿足一次,那么它肯定會在未來的迭代中得到滿足,因為該回圈中的其他引數都沒有改變 => 永不結束的回圈。
從你的代碼的其余部分來看,它可能應該是
Spalte = s;
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/386433.html
