2013-08-17 24 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