我編碼的流氓般的控制檯程序,但我有一個問題:捕捉塊沒有發現異常,爲什麼?
我的代碼沒有發現異常。我有一個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