我正在尝试编写一个模拟赛车比赛的程序,用户在比赛中插入汽车数量和每辆车的时间。该程序将以最快的时间打印汽车,并以最快的时间打印汽车。
所以我写了这段代码:
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;
我不明白为什么会收到此错误。
答案 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);
使用second
或numc < 1
时未分配的time >= first
变量。
使用
int second = 0;
初始化此字段。