我的代码会生成字符' L'在随机的地方进入2D阵列,但我需要程序来检查是否有没有' L'已经如果它在那里,程序应该再次经历一代的过程。但是出现了问题,因为Stackoverflowexception出现了。有没有人知道如何更改我的代码,或者如何增加堆栈大小? (我不得不提一下,我已经尝试使用Project Properties增加堆栈大小,但我没有链接器选项。而且我也是编程的新手,所以我不知道如何使用editbin或命令)。提前谢谢。
修改
scrollViewDidEndDecelerating
这是代码的重要部分。
答案 0 :(得分:-1)
你可以做的是:如果创造失败则传回布尔并从头开始重试。
public void Generate()
{
Fill();
while(!Fleet())
{
// I assume Fill clears your board again?!
Fill();
}
}
public bool Fleet()
{
return Ship2(Utility.R(1,9),Utility.R(1,9),Utility.R(4)) &&
Ship3(Utility.R(1,9),Utility.R(1,9),Utility.R(4)) &&
Ship3(Utility.R(1,9),Utility.R(1,9),Utility.R(4)) &&
Ship4(Utility.R(1,9),Utility.R(1,9),Utility.R(4)) &&
Ship5(Utility.R(1,9),Utility.R(1,9),Utility.R(4));
}
public bool Ship2(int x, int y, int r)
{
if (r == 0)
{
return CreateShip(x, y) &&
CreateShip(x, (y + 1));
}
if (r == 1)
{
return CreateShip(x, y) &&
CreateShip(x, (y + -1));
}
if (r == 2)
{
return CreateShip(x, y) &&
CreateShip((x-1), (y));
}
if (r == 3)
{
return CreateShip(x, y) &&
CreateShip((x+1), (y));
}
return false;
}
public bool CreateShip(int x, int y)
{
if (x <= 9 && y <= 9 && x >= 0 && y >= 0)
{
if (Board[x, y] == 'L')
{
return false;
}
else
{
Board[x, y] = 'L';
}
}
else
{
return false;
}
return true;
}
注意:如果CreateShip的输入参数永远不会改变,这仍然不起作用。您现在看不到任何异常,但Generate方法永远不会完成。