Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 多维数组中的IndexOutOfRangeException_C#_Multidimensional Array - Fatal编程技术网

C# 多维数组中的IndexOutOfRangeException

C# 多维数组中的IndexOutOfRangeException,c#,multidimensional-array,C#,Multidimensional Array,我已经附上了下面的代码,我得到了在A部分没有处理的IndexOutOfRangeException,然后我尝试了下面的Try catch,但现在我得到了 “app.exe中发生了类型为“System.IndexOutOfRangeException”的首次意外异常 在C:\Users\Rahul Taneja\Documents\Visual Studio 2010\Projects\app\app\Form6.cs中的app.Form6.ZMove(字符串s1,字符串s2)中:第136行“ 堆

我已经附上了下面的代码,我得到了在A部分没有处理的IndexOutOfRangeException,然后我尝试了下面的Try catch,但现在我得到了

“app.exe中发生了类型为“System.IndexOutOfRangeException”的首次意外异常 在C:\Users\Rahul Taneja\Documents\Visual Studio 2010\Projects\app\app\Form6.cs中的app.Form6.ZMove(字符串s1,字符串s2)中:第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;
            }
        }
public void ZMove(字符串s1、字符串s2)
{
//移动2-1-4-3
intj=Int32.Parse(s1);
intk=Int32.Parse(s2);
对于(int l=0;l
字符串s1、s2是否可能是绝对位置,您实际上应该执行以下操作:

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

int k = Int32.Parse(s2) -1;

您有12种不同的阵列访问,这可能是问题所在,您不让我们看到阵列是如何创建的。没有一个通情达理的人能帮你解决你的具体问题

因此,我将尝试回答这个问题

如何调试
索引自动失效异常

  • 在VisualStudio中打开“异常”窗口
  • 展开“公共语言运行时异常”窗口
  • 展开系统节点
  • 选中System.IndexOutOfRangeException的抛出复选框
当异常发生时,调试器将中断。现在通过观察、工具提示、命令或即时窗口检查变量。我相信你会很快找到问题所在

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

  • 菜单项调试->异常
  • 键盘快捷键Ctrl+Alt+E
  • 键盘快捷键Ctrl+D,E
  • 通过调试命令窗口。异常

哪一行引发异常?那条线上的阵列的形状是什么?简单的答案是代码中使用的数组索引之一在数组中不存在。我提到过,它是A部分,数组是3D数组,当抛出异常时,
数组
值的形状是什么?以及
j
的值?数组的第一个维度没有索引2或1,或者第二个维度没有索引
j
。请注意,您使用的是锯齿状数组,它们与多维数组类似,但不完全相同。数组是6*N*N,其中N由用户给定,它存储在某个位置,我通过函数获得了该值(以字符串格式),然后我铸造这个字符串并将值保存在变量j中。对于异常,我显示了StackTrace