Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.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# 数组中的ArgumentOutOfRange异常_C#_Arrays_Exception - Fatal编程技术网

C# 数组中的ArgumentOutOfRange异常

C# 数组中的ArgumentOutOfRange异常,c#,arrays,exception,C#,Arrays,Exception,我正在创建一个方法,它可以找到下一个元素和上一个元素值之间的最小绝对差异 方法中发生ArgumentOutofRange异常。但是,当我添加try、catch异常时,它是有效的。我的代码有什么问题?然而,我创建了适当的条件,比如如果i等于0,当然它找不到[i-1],那么它将是下一个值[1]和[0]之间的差值。若它成为最后一个元素,那个么这个值就是它最后的[i-1]和之前的[i-2]之间的差值 namespace ConsoleApplication3 { class Program

我正在创建一个方法,它可以找到下一个元素和上一个元素值之间的最小绝对差异

方法中发生ArgumentOutofRange异常。但是,当我添加try、catch异常时,它是有效的。我的代码有什么问题?然而,我创建了适当的条件,比如如果i等于0,当然它找不到[i-1],那么它将是下一个值[1]和[0]之间的差值。若它成为最后一个元素,那个么这个值就是它最后的[i-1]和之前的[i-2]之间的差值

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            List<Cla> Clalist = new List<Cla>();
            Clalist.Add(new Cla(0));
            Clalist.Add(new Cla(2));
            Clalist.Add(new Cla(3));
            Clalist.Add(new Cla(10));
            Clalist.Add(new Cla(100));
            Clalist.Add(new Cla(65));

            Program nn = new Program();
            nn.GetAbs(Clalist);

            Console.WriteLine(Clalist[0].AbsValue);
            Console.WriteLine(Clalist[1].AbsValue);
            Console.WriteLine(Clalist[2].AbsValue);
            Console.WriteLine(Clalist[3].AbsValue);
            Console.WriteLine(Clalist[4].AbsValue);
            Console.WriteLine(Clalist[5].AbsValue);

            Console.ReadLine();
        }
        public void GetAbs(List<Cla> n)
        {
            int z = n.Count;
            for (int i = 0; i < z; i++)
            {
                if(i == 0)
                {
                    n[0].AbsValue = Math.Abs(n[1].Value - n[0].Value);
                }
                if(i == (z-1))
                {
                    n[z-1].AbsValue = Math.Abs(n[z-1].Value - n[z -2].Value);
                }
                else
                {
                    try
                    {
                        var AbsV = Math.Abs(n[i + 1].Value - n[i].Value);
                        var AbsV2 = Math.Abs(n[i - 1].Value - n[i].Value); //exception occurs here
                        if (AbsV < AbsV2)
                            n[i].AbsValue = AbsV;
                        else
                            n[i].AbsValue = AbsV2;
                    }
                 /*   catch (ArgumentOutOfRangeException)
                    {
                        n[0].AbsValue = n[1].Value - n[0].Value; */ When i add this it works
                    }
                    }
                }
            }
        }
    }

    class Cla
    {
        public int Value;
        public int AbsValue;
        public Cla(int v)
        {
            Value = v;
        }
    }
您应该有三种相互排斥的情况:

i==0左边框 i==z-1右边框 i==1..z-2内部值 像这样:

for (int i = 0; i < z; i++)
{
    if (i == 0)           // 1st case (left border)
    {
        n[0].AbsValue = Math.Abs(n[1].Value - n[0].Value);
    }
    else if(i == (z-1))  // 2nd (please, notice "else if") (right border)
    {
       n[z-1].AbsValue = Math.Abs(n[z-1].Value - n[z -2].Value);
    }
    else // 3d (inner values)
    {
    ....
    }
您应该有三种相互排斥的情况:

i==0左边框 i==z-1右边框 i==1..z-2内部值 像这样:

for (int i = 0; i < z; i++)
{
    if (i == 0)           // 1st case (left border)
    {
        n[0].AbsValue = Math.Abs(n[1].Value - n[0].Value);
    }
    else if(i == (z-1))  // 2nd (please, notice "else if") (right border)
    {
       n[z-1].AbsValue = Math.Abs(n[z-1].Value - n[z -2].Value);
    }
    else // 3d (inner values)
    {
    ....
    }

抛出异常的行在i==0时出现。第二条if语句需要变成else if,或者else语句需要变成else ifi>0。

引发异常的行在i==0时出现。第二个if语句需要变成else if,或者else语句需要变成else ifi>0。

将ifi==z-1更改为else ifi==z-1-不同语言的可能重复,相同issue@DmitryBychenko达格瓦诺罗夫·哈格瓦贾夫:不客气!Пожалуйста!@JanDvorak,如果这个问题的答案可以直接应用到C,那么标签应该添加到问题中,特别是如果你希望以它作为重复目标来结束C问题。如果问题适用于多种语言,那么这样做也会帮助人们找到问题。将ifi==z-1更改为else ifi==z-1-不同语言的可能副本,相同issue@DmitryBychenko达格瓦诺罗夫·哈格瓦贾夫:不客气!Пожалуйста!@JanDvorak,如果这个问题的答案可以直接应用到C,那么标签应该添加到问题中,特别是如果你希望以它作为重复目标来结束C问题。如果这个问题适用于多种语言,那么这样做也会帮助人们找到这个问题。