-2

我附上了下面的代码,我得到 IndexOutOfRangeException 未在 A 部分中处理,然后我尝试了如下所示的 Try-catch 但现在我得到了

“在 C:\Users\Rahul Taneja\Documents\Visual Studio 2010\Projects\app\app 中 app.Form6.ZMove(String s1, String s2) 的 app.exe 中发生了类型为‘System.IndexOutOfRangeException’的第一次机会异常\Form6.cs:第 136 行"

在堆栈跟踪中

谁能告诉我为什么会这样,解决办法是什么?

public void ZMove(string s1, string s2)
        {
            //Move 2-1-4-3
            int j = Int32.Parse(s1);
            int k = Int32.Parse(s2);
            for (int l = 0; l < k; l++)
            {
                try
                {
                    swap(array[2][j], array[1][j]); ///Part A
                    swap(array[1][j], array[4][j]);
                    swap(array[4][j], array[3][j]);
                    swap(array[3][j], array[2][j]);
                }
                catch (IndexOutOfRangeException e)
                {
                    MessageBox.Show(e.StackTrace);
                    //throw;
                }
            }
        }

        private void swap(char[] p1, char[] p2)
        {
            //throw new NotImplementedException();
            int l = p1.Length;
            for (int i = 0; i < l; i++)
            {
                char temp = p1[i];
                p1[i] = p2[i];
                p2[i] = temp;
            }
        }
4

2 回答 2

0

字符串 s1,s2 是否有可能是绝对位置,您实际上应该这样做:

int j = Int32.Parse(s1) -1;

int k = Int32.Parse(s2) -1;
于 2012-07-19T16:23:35.117 回答
0

您有 12 种不同的数组访问可能是问题所在,并且您没有让我们看到数组是如何创建的。没有合理的人可以帮助您解决您的具体问题,

所以我会尝试回答这个问题

如何调试IndexOutOfRangeException

  • 在 Visual Studio 中打开异常窗口
  • 展开公共语言运行时异常窗口
  • 展开系统节点
  • 检查 System.IndexOutOfRangeException 的 Throw 复选框

当异常发生时,您的调试器将中断。现在通过监视、工具提示、命令或即时窗口检查变量。我相信您会很快找到问题所在。

在此处输入图像描述

注意:您可以通过以下方式访问“例外”窗口

  • 菜单项调试 -> 异常
  • 键盘快捷键Ctrl+Alt+E
  • 键盘快捷键Ctrl+D,E
  • 命令窗口通过>Debug.Exceptions
于 2012-07-19T21:39:25.807 回答