我正在尝试创建一个数独游戏,对于那些不知道它是什么的人。你有一个9x9的盒子,需要用1-9的数字填充,每一个数字在其行和列中必须是唯一的,并且在3x3盒子中也是如此。我结束了在2维数组中循环的负载。嵌套环意外突然
但是在某个时候,它只是停下来,没有任何例外,只是爆发,没有任何反应,它并不总是处于相同的位置,但总是走到一半。
我期待至少有一个堆栈溢出异常。
这里是我的代码:
public class Engine
{
public int[,] Create()
{
int[,] outer = new int[9, 9];
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9; j++)
{
outer[i, j] = GetRandom(GetUsed(outer, i, j));
}
}
return outer;
}
List<int> GetUsed(int[,] arr, int x, int y)
{
List<int> usedNums = new List<int>();
for (int i = 0; i < 9; i++)
{
if (arr[x, i] != 0 && i != y)
{
if(!usedNums.Contains(arr[x, i]))
usedNums.Add(arr[x, i]);
}
}
for (int i = 0; i < 9; i++)
{
if (arr[i, y] != 0 && i != x)
{
if (!usedNums.Contains(arr[i, y]))
usedNums.Add(arr[i, y]);
}
}
int x2 = 9 - (x + 1);
int y2 = 9 - (y + 1);
if (x2 <= 3)
x2 = 2;
else if (x2 > 3 && x2 <= 6)
x2 = 5;
else x2 = 8;
if (y2 <= 3)
y2 = 2;
else if (y2 > 3 && y2 <= 6)
y2 = 5;
else y2 = 8;
for (int i = x2 - 2; i < x2; i++)
{
for (int j = y2 - 2; j < y2; j++)
{
if (arr[i, j] != 0 && i != x && j != y)
{
if (!usedNums.Contains(arr[i, j]))
usedNums.Add(arr[i, j]);
}
}
}
return usedNums;
}
int GetRandom(List<int> numbers)
{
Random r;
int newNum;
do
{
r = new Random();
newNum = r.Next(1, 10);
} while (numbers.Contains(newNum));
return newNum;
}
}
你有没有试过,看看它停在哪里?另外,我们在谈论哪个功能?这里有半打循环.. – tzaman 2010-05-15 10:52:57
我正在第一个循环的第一个循环中“创建()” 它永远不会相同,有时在4,7或5,3,总是处于不同的位置,它似乎很随机。 – 2010-05-15 11:00:43
非常... *随机*你说? (我无法抗拒) – Phil 2010-05-15 11:23:06