我的编译器一直说我没有分配我的变量

时间:2015-05-09 18:17:44

标签: c# unassigned-variable

我正在尝试编写一个模拟赛车比赛的程序,用户在比赛中插入汽车数量和每辆车的时间。该程序将以最快的时间打印汽车,并以最快的时间打印汽车。

所以我写了这段代码:

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

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int numc, first, second, time, i, temp;
            Console.WriteLine("Please insert the number of cars in the competition");
            numc = int.Parse(Console.ReadLine());
            Console.WriteLine("Please insert the time it took the car to finish the race");
            time = int.Parse(Console.ReadLine());
            first = time;
            for (i = 0; i < numc; i++)
            {
                Console.WriteLine("Please insert the time it took the car to finish the race");
                time = int.Parse(Console.ReadLine());
                if(time<first)
                {
                    temp=first;
                    first = time;
                    second = temp;
                }
            }
            Console.WriteLine("The time of the car who got first place is:" +first);
            Console.WriteLine("The time of the car who got second place is:" +second);
            Console.ReadLine();
        }
    }
}

我收到此错误:

  

使用未分配的本地变量&#39; second&#39;

我不明白为什么会收到此错误。

4 个答案:

答案 0 :(得分:2)

您只在此循环中指定second

if(time<first)
{
     temp=first;
     first = time;
     second = temp;
}

如果你不进入这个会发生什么?

如果你想稍后使用它,你必须确保它被分配,无论它在哪里。

答案 1 :(得分:1)

您声明变量:

int numc, first, second, time, i, temp;

然后你可以分配它:

for (i = 0; i < numc; i++)
{
    // etc.
    if(time<first)
    {
        temp=first;
        first = time;
        second = temp;
    }
    // etc.
}

(或者您可能不会,在运行时取决于该条件或运行时numc的值。)

然后你使用它:

Console.WriteLine("The time of the car who got second place is:" +second);

如果if条件评估为false会怎样?或者,如果for循环没有迭代任何东西?然后在使用变量之前永远不会分配变量。这就是编译器告诉你的内容。

如果您要始终使用变量,那么您需要确保始终为其指定一些值。

答案 2 :(得分:1)

这里的问题是你的作业

second = temp
如果numc输入少于一个,

将不会执行。

由于编译器因此无法保证已分配它,因此它会向您发出警告。

在您的情况下,您可以执行分配

之类的操作
int second = 0;

但您可能也希望将Console.WriteLine位更改为:

if (numc > 0)
{
    Console.WriteLine("The time of the car who got first place is:" +first);
    Console.WriteLine("The time of the car who got second place is:" +second);
}
else
{
    Console.WriteLine("No cars were in the competition");
}

Console.ReadLine();

答案 3 :(得分:0)

这一行:

Console.WriteLine("The time of the car who got second place is:" +second);

使用secondnumc < 1时未分配的time >= first变量。

使用

int second = 0;

初始化此字段。