0

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

所以我写了这段代码:

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();
        }
    }
}

我收到此错误:

使用未分配的局部变量“秒”

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

4

4 回答 4

2

你只是second在这个循环内分配:

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

如果你不进去会发生什么?

如果您以后想使用它,您必须确保它被分配到任何地方。

于 2015-05-09T18:21:23.523 回答
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循环没有迭代任何东西?然后在使用之前永远不会分配变量。这就是编译器告诉你的。

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

于 2015-05-09T18:20:59.123 回答
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();
于 2015-05-09T18:21:20.897 回答
0

这一行:

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

使用second未赋值的变量 whennumc < 1time >= first.

利用

int second = 0;

初始化该字段。

于 2015-05-09T18:21:09.313 回答