c#获取运行时错误。为什么?

时间:2017-03-28 13:13:29

标签: c# .net

嘿我试图解决这个问题,但Kattis说我得到运行时错误,这意味着未捕获的异常。 https://open.kattis.com/problems/fizzbuzz

我的代码中是否有任何遗漏了应用程序崩溃的内容?

public static void Main(string[] args)
{
    string line = "";
    while ((line = Console.ReadLine()) != "0")
    {

        var numbers = line.Split(' ').Select(int.Parse).ToList();
        int x = numbers[0];
        int y = numbers[1];
        int N = numbers[2];
        for(int i = 1; i <= N; i++)
        {
            bool found = false;
            bool found2 = false;
            if(i % x == 0)
            {
                if(i % y==0)
                {
                    Console.WriteLine("FizzBuzz");
                    found2 = true;
                }
                else
                {
                    Console.WriteLine("Fizz");
                    found = true;                           
                }
            }
            if(i % y == 0 && !found2)
            {
                Console.WriteLine("Buzz");
                found = true;
            }
            if(!found && !found2)
            {
                Console.WriteLine(i);
            }
        }
       }
}

2 个答案:

答案 0 :(得分:1)

我读到这个问题的方法是在控制台上给你一行3个数字。所以你应该只做一个ReadLine。我建议删除while循环,然后执行。

var numbers = Console.ReadLine().Split(' ').Select(int.Parse).ToList();

答案 1 :(得分:0)

(ABC_2017031)/1 (ABC_2017031+ABC_2017032)/2 (ABC_2017031+ABC_2017032+ABC_2017033)/3 (ABC_2017031+ABC_2017032+ABC_2017033+ABC_2017034)4 至少有3级甚至1级,没有人向你保证。 这意味着以下所有行都可以引发索引超出范围的异常:

numbers

因此,在分配上述行

之前,您需要检查int y = numbers[1]; int N = numbers[2];