由于参数索引错误而初始化数组时出现问题

时间:2018-11-10 17:40:41

标签: c#

这是我正在进行的一系列计算机科学练习的结果,在尝试将整数列表拆分为子列表时,我陷入了以下编译器错误。我尝试了许多初始化整数数组列表的方法,但似乎找不到在文档中或堆栈溢出时可用的配置。

    char[] array = digits.ToCharArray();

    var intArray = new List<int>(new int[span]);

    for (int i = 0; i < span; i++) 
    {
       intArray[i] =  (int)Char.GetNumericValue(array.ElementAt(i));
    }

    var data = new List<int[]>();
    int n = 0;
    while (data[n].Length == span)
    {
       data[n] = intArray.Skip(n).Take(span).ToArray();
       n++;
    }

输出:

Parameter name: index
   at System.Collections.Generic.List`1.get_Item(Int32 index)
   at LargestSeriesProduct.GetLargestProduct(String digits, Int32 span) in /Users/.../LargestSeriesProduct.cs:line 20
   at seriesTest.Main() in /Users/.../LargestSeriesProduct.cs:line 53

第20行在我的IDE中显示为while (data[n].Length == span)


已更新

我认为先在 Mathematica 中编写代码可能是个有益的练习,以深入了解C#中存在的列表问题列表。当然,这很有启发性(partition函数在这种情况下非常有帮助),但是我仍然没有解决最初问题的方法。

largestSeriesProduct[string_, int_Integer] := Module[{numbers,lists},
   numbers = ToExpression /@ Characters @ string;
   lists = Times @@@ Partition[numbers,int,1];
   Max @ lists
]

例如,哪个返回:

largestSeriesProduct["73167176531330624919225119674426574742355349194934",6]

23520

2 个答案:

答案 0 :(得分:0)

为您提供帮助:

var intArray = new List<int>(new int[span]);

            for (int i = 0; i < span; i++)
            {
                intArray.Add((int)Char.GetNumericValue(array.ElementAt(i)));
            }

答案 1 :(得分:0)

我的解决方案。

        var intArray = new List<int>(new int[array.Length]);
        for (int i = 0; i < array.Length; i++) 
        {
            intArray[i] = (int)Char.GetNumericValue(array.ElementAt(i));
        }
        var data = new List<int[]>();
        int n = 0;
        while (intArray.Skip(n).Take(span).ToArray().Length == span)
        {
            data.Add(intArray.Skip(n).Take(span).ToArray());
            n++;   
        }
        var list = new List<long>(data.Count());
        foreach (int[] nums in data)
        {
            list.Add((long)nums.Aggregate((total, next) => total * next));
        }
        long maxProduct = list.Max();
        return maxProduct;