列表错误System.ArgumentOutOfRangeException

时间:2017-08-15 21:28:06

标签: c# arraylist

在Console.WriteLine中找到错误(“N:”+ i +“FakultätvonN:”+ list [i]); 它说System.ArgumentOutOfRangeException我没有得到问题,因为VS没有强调任何东西。

抱歉愚蠢的问题,我刚刚开始我的c#学习。

using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace wbs
{
    class Programm
    {
        static void Main(string[] args)
        {
            int a = 0;
            a = Convert.ToInt32(Console.ReadLine());

            if (a == 0)
            {
                Console.WriteLine("Falsche eingabe.");
            }
            else
            {
                List<long> list = new List<long>();
                long n = 1;
                for (int i = 1; i <= a; i++)
                {
                    n *= i;
                    list.Add(n);
                    Console.WriteLine("N: " + i + " Fakultät von N: " + list[i]);
                }
            }
            Console.ReadKey();
        }

    }
}

3 个答案:

答案 0 :(得分:2)

list[]索引器需要int,而非long

您不应在此使用long

答案 1 :(得分:0)

在“其他”正文中使用以下内容:

  List<long> list = new List<long>();
  long n = 1;
  for (int i = 1; i <= a; i++)
  {
     n *= i;
     list.Add(n);
     Console.WriteLine("N: " + i + " Fakultät von N: " + list[i-1]);
   }

注意List声明中的'long'和&amp; for循环中的'int'。 因为你将'i'限制为'a'int,对我来说也应该是足够的。最重要的是,我认为你不会计算超过2 ^ 31个阶乘:)。

此外,您还有另一个错误:

'i'的初始值为1.因此,在向列表中仅添加一个值后,您正在尝试读取列表[1]。但是列表索引是从0开始的,所以应该是list [0]。 所以在你的代码中用列表[i-1]替换列表[i],如上面的代码所示。

答案 2 :(得分:0)

问题在于这一行:

  

Console.WriteLine(“N:”+ i +“FakultätvonN:”+ list1 [j ++]);

不能有任何列表的地址为1,因为我在开始时被解析,列表与数组从0开始相同,所以我试图从1开始它并导致超出范围错误:)< / p>

我是1,但我的名单从0开始而不是1 :)带我整个该死的日子,但我学到了很多。

using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace wbs
{
    class Programm
    {
        static void Main(string[] args)
        {
            int a = 0;
            a = Convert.ToInt32(Console.ReadLine());
            if (a == 0)
            {
                Console.WriteLine("Falsche eingabe.");
            }
            else
            {
                List<double> list1 = new List<double>();
                double n = 1;

                for (int i = 1, j = 0; i <= a; i++)
                {
                    n = n * i;
                    list1.Add(n);
                    Console.WriteLine("N: " + i + " Fakultät von N: " + list1[j++]);
                }
            }
            Console.ReadKey();
        }
    }
}