2013-08-17 62 views
-4

我編碼的流氓般的控制檯程序,但我有一個問題:捕捉塊沒有發現異常,爲什麼?

我的代碼沒有發現異常。我有一個voidfor循環和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編輯:我定了「幻數」(不是低到零,也不超過最大值), ,無論發生什麼事情,這都會工作。異常問題旁邊

+2

你的意思是拋出try catch的異常?很難相信 –

+4

好,愚蠢的問題 - 你在調試模式?因爲有時Visual Studio被配置爲在所有異常情況下停止,即使在catch塊之前。 – Kobi

+4

我強烈建議更改代碼 - 這些都是非常糟糕的事情。 Try-catch應該可以捕捉異常,而不依賴於你。 OutOfRange異常是絕對不可接受的,無論你是否會捕捉它。 – Tarec

回答

1

你想試試這個:

public void lightUp(int pos) 
{ 
    int loopcounter = -2; 
    int jcount = 8; 
    int stepcount=1; 
    int stepcountReflected=0; 
    try 
    { 
     for (int x = 1; x > -6; x--) 
      { 
       if (x == 1) 
       { 
        stepcountReflected=0.5*stepcount; 
       } 
       else 
       { 
        stepcountReflected = stepcount; 
       } 
       for (int i = stepcount; i > loopcounter; i =- (2 * stepcountReflected)) 
       { 
        int lolPos = pos + (i * columns); 
        for (int j = 0; j < jcount; j++) 
        { 
         tiles[lolPos + j].isVisible = true; 
         tiles[lolPos - j].isVisible = true; 

        } 
       } 
       loopcounter = loopcounter - 1; 
       jcount = jcount - 1; 
      } 
    } 

    catch (Exception ex) 
    { 
     // do what yo need to do here 
    } 


} 

目前您正試圖捕捉異常的子/功能之外,這就是爲什麼你沒有得到堅實的錯誤描述。 當你沒有特定的「例外」而不是非常專業的「StackOverflowException」,你會看到什麼和在哪裏給你頭痛。 逐行添加記錄的日誌可能會對您有所幫助,但這是您的問題之外的方式,正是我會做的。

+0

好吧,這是不相關了...但無論如何,謝謝。 – joppiesaus

-1

兩件事情我可以看到:

  1. 存在這樣的方法太多的代碼。這將是很難測試,如果失敗,很難找出原因 - 這是你現在看到的。

  2. 該代碼看起來像c/p幾個更正,所以你會適當更好的抽象,所以它。這將使後面更容易更改,代碼更少。較少的代碼幾乎總是好的。

你所面對的問題是,你必須specifiy你想抓住什麼錯誤,並進行必要的錯誤處理。通常不會捕獲所有異常(Exception類),因爲這會使調試更加困難。它是邪惡的!

+5

好點,但所有的話題。 – BartoszKP