增加堆栈大小c#

时间:2017-01-02 16:20:15

标签: c# stack-overflow

我的代码会生成字符' L'在随机的地方进入2D阵列,但我需要程序来检查是否有没有' L'已经如果它在那里,程序应该再次经历一代的过程。但是出现了问题,因为Stackoverflowexception出现了。有没有人知道如何更改我的代码,或者如何增加堆栈大小? (我不得不提一下,我已经尝试使用Project Properties增加堆栈大小,但我没有链接器选项。而且我也是编程的新手,所以我不知道如何使用editbin或命令)。提前谢谢。

修改

scrollViewDidEndDecelerating

这是代码的重要部分。

1 个答案:

答案 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方法永远不会完成。