我正在编写一个类似流氓的控制台程序,但我有一个问题:
我的代码没有捕获异常。我有一个void
withfor
循环和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 块确实有效。但不是在我启动程序时。(播放器的位置是随机的,如果它靠近左侧屏幕的一侧,则在启动时会发生异常。)
另一个编辑:我修复了“神奇数字”(不低于零,也不超过最大值),无论发生什么,它都会一直有效。