我编码的流氓般的控制台程序,但我有一个问题:捕捉块没有发现异常,为什么?
我的代码没有发现异常。我有一个void
与for
循环和arrays
。 当数组超出范围时发生错误。发生这种情况是因为void不检查数组是否为零或超过最大值。
void lightUp(int pos)
{
//first and second
for (int i = 1; i > -2; i--)
{
int lolPos = pos + (i * columns);
for (int j = 0; j < 8; j++)
{
tiles[lolPos + j].isVisible = true;
tiles[lolPos - j].isVisible = true;
}
}
//third
for (int i = 2; i > -3; i -= 4)
{
int lolPos = pos + (i * columns);
for (int j = 0; j < 7; j++)
{
tiles[lolPos + j].isVisible = true;
tiles[lolPos - j].isVisible = true;
}
}
//fourth
for (int i = 3; i > -4; i -= 6)
{
int lolPos = pos + (i * columns);
for (int j = 0; j < 6; j++)
{
tiles[lolPos + j].isVisible = true;
tiles[lolPos - j].isVisible = true;
}
}
//fifth
for (int i = 4; i > -5; i -= 8)
{
int lolPos = pos + (i * columns);
for (int j = 0; j < 5; j++)
{
tiles[lolPos + j].isVisible = true;
tiles[lolPos - j].isVisible = true;
}
}
for (int i = 5; i > -6; i -= 10)
{
int lolPos = pos + (i * columns);
for (int j = 0; j < 3; j++)
{
tiles[lolPos + j].isVisible = true;
tiles[lolPos - j].isVisible = true;
}
}
}
所以我做了一个catch块,如果错误发生我的编程'不会崩溃。
try
{
lightUp(player);
}
catch { }
但是,我仍然得到IndexOutOfRange
例外。他们没有被catch
区块困住。 这是为什么?编辑: 感谢您的所有答案。以为,问题并不在于调试模式选项。 我发现这只发生在程序启动时。我测试过,如果我只是走到“超出范围”(虚空点亮了播放器附近的瓦片),那么catch块确实会起作用。但不是当我开始我的程序(播放器的位置是随机的,如果是靠近左侧屏幕的一侧,在发生异常时启动。)
ANOTHER编辑:我定了“幻数”(不是低到零,也不超过最大值), ,无论发生什么事情,这都会工作。异常问题旁边
你的意思是抛出try catch的异常?很难相信 –
好,愚蠢的问题 - 你在调试模式?因为有时Visual Studio被配置为在所有异常情况下停止,即使在catch块之前。 – Kobi
我强烈建议更改代码 - 这些都是非常糟糕的事情。 Try-catch应该可以捕捉异常,而不依赖于你。 OutOfRange异常是绝对不可接受的,无论你是否会捕捉它。 – Tarec