繁体   English   中英

C# 检查数组中的下一个值是否为 null

[英]C# checking if next value in array is null

此代码循环遍历整数数组,将当前索引处的 int 与下一个索引 (i + 1) 处的 int 相加,然后求出它们的平均值(除以 2)。 然后将此双精度附加到双精度数组。 但是,当我到达数组的末尾时,由于没有超出最后一个值的值,因此会发生错误。 我以为我可以检查一下值是否为 null 但错误是事先发生的。 错误发生在第 15 行“if (numbers[i + 1].= null)”。

using System;
using System.Collections;
using System.Linq;

public class Test
{
    public static double[] Averages(int[] numbers)
    {
        double[] averageArray = new double[0];
        for (int i = 0; i < numbers.Length; i++)
        {
            double sum = 0;
            double avg = 0;

            if (numbers[i + 1] != null)
            {
                sum += numbers[i] + numbers[i + 1];
                avg = sum / 2;
            }
            averageArray = averageArray.Append(avg).ToArray();
        }
        return averageArray;
    }

    public static void Main()
    {
        int[] testArray1 = { 2, 2, 2, 2 };
        Console.WriteLine(Averages(testArray1));
    }
}

好的,所以,您的代码需要考虑几件事。 你现在如何拥有它会抛出一个超出范围的异常。

你永远不应该在你的 int 数组中有一个 null object 所以这不是你需要做的检查。

如果需要它接受空值,则需要将其声明为int?[]

你现在拥有代码的方式是 output \ 返回值是一个包含 5 个值的数组,当你有 4 个值时

2, 2, 2, 1, 0

void Main()
{
    int[] testArray1 = { 2, 2, 2, 2,  };
    Console.WriteLine(Averages(testArray1));
}

public static double[] Averages(int[] numbers)
{
    double[] averageArray = new double[0];
    for (int i = 0; i <= numbers.Length; i++)
    {
        double sum = 0;
        double avg = 0; // This will cause a last object to be added to your array

        if (i == numbers.Length - 1) // This adds the last item, this also needs to have order or preference as this would also then cause a Index Out of Range Exception 
        {
            sum += numbers[i];
            
        }
        else if(i <= numbers.Length -1) // This adds all items that are not the last item in the array
        {
            sum += numbers[i] + numbers[i + 1];
        }
        avg = sum / 2;
        averageArray = averageArray.Append(avg).ToArray();
    }

    return averageArray;
}

输出

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM