C# 未赋值局部变量的使用
我必须建立一个程序,计算一个比萨饼的直径,找出它能容纳多少块比萨饼,每个比萨饼的面积,它用常数定义比萨饼的大小,但是一个int numberOfSlice的错误,它表示使用了未赋值的局部变量,甚至认为我在赋值if语句C# 未赋值局部变量的使用,c#,C#,我必须建立一个程序,计算一个比萨饼的直径,找出它能容纳多少块比萨饼,每个比萨饼的面积,它用常数定义比萨饼的大小,但是一个int numberOfSlice的错误,它表示使用了未赋值的局部变量,甚至认为我在赋值if语句 class Program { static void Main(string[] args) { //declarations of Constans const int SMALL_MIN = 12; cons
class Program
{
static void Main(string[] args)
{
//declarations of Constans
const int SMALL_MIN = 12;
const int SMALL_MED = 16;
const int MED_LARGE = 24;
const int LARGE_XLARGE = 30;
const int XL_MAX = 36;
const int SMALL_SLICE = 8;
const int MED_SLICE = 12;
const int LARGE_SLICE = 16;
const int XL_SLICES = 24;
//declarations of varable
double pizzaDiameter;
int numberOfSlices = 0;
double sliceArea;
double radius;
string userInput = " ";
Console.WriteLine("Please enter the diameter of your pizza:"); // tell user to input diameter
userInput = Console.ReadLine(); // gets userinput
double.TryParse(userInput, out pizzaDiameter); // see if userinput is vaild
if (pizzaDiameter >= SMALL_MIN && pizzaDiameter <= XL_MAX) // if in range will continue
{
// all the ranges for the pizzas
if (pizzaDiameter >= SMALL_MIN && pizzaDiameter < SMALL_MED)
{
numberOfSlices = (SMALL_SLICE);
}
else if (pizzaDiameter >= SMALL_MED && pizzaDiameter < MED_LARGE)
{
numberOfSlices = (MED_SLICE);
}
else if (pizzaDiameter >= MED_SLICE && pizzaDiameter < LARGE_XLARGE)
{
numberOfSlices = (LARGE_SLICE);
}
else if (pizzaDiameter >= LARGE_XLARGE && pizzaDiameter <= XL_MAX)
{
numberOfSlices = (XL_SLICES);
}
radius = pizzaDiameter / 2; // divides pizzaDiameter to get radius
sliceArea = Math.PI * Math.Pow(radius, 2) / numberOfSlices; // gets slice area
sliceArea = Math.Round(sliceArea, 2); // rounds to 2 places
// output of resluts
Console.WriteLine("\nA diameter of " + pizzaDiameter + " will yield " + numberOfSlices + " slices.");
Console.WriteLine("\nEach slice will have an area of " + sliceArea + "\".");
Console.WriteLine("\nPress any key to exit..."); // tells user to end program
Console.ReadKey(); // readkey to end program
}
else // if the diameter was not in range will display this error
{
Console.WriteLine("\nEntry Error ");
Console.WriteLine("\nPizza must have a diameter in the range of 12\" to 36\" inclusive!");
Console.WriteLine("please try again");
Console.WriteLine("\nPress any key to end this application...");// tells user to end program
Console.ReadKey(); // readkey to end program
}
}
}
}错误告诉您需要知道的一切。numberOfSlices变量未正确初始化。在使用它之前,必须沿每个可能的代码路径为它指定一个值 尝试在声明时初始化它:
int numberOfSlices = 0;
或者,您可以更仔细地构造if块以避免此错误:
if (pizzaDiameter <= XL_MAX || pizzaDiameter >= SMALL_MIN)
{
if (pizzaDiameter >= SMALL_MIN || pizzaDiameter < SMALL_MED)
{
numberOfSlices = (SMALL_SLICE);
}
...
else // Note, you do not need the final `if` in this block
{
numberOfSlices = (XL_SLICES);
}
radius = pizzaDiameter/2;
sliceArea = Math.PI * Math.Pow(radius, 2);
Console.WriteLine("\nA diameter of " + pizzaDiameter + " will yield." + numberOfSlices + " slices.");
Console.WriteLine("\nEach slice will have an area of " + sliceArea + "\".");
Console.WriteLine("\nPress any key to exit...");
Console.ReadKey();
}
else
{
Console.WriteLine(" Entry Error ");
Console.WriteLine("Pizza must have args diameter in the range of 12\" to 36\" inclusive!");
Console.WriteLine("please try again");
Console.WriteLine(" /nPress any key to end this application...");
Console.ReadKey();
}
在此代码中,numberOfSlices仅在if块内使用,在该块中,保证在使用前为其赋值。该变量在外部else块中仍然未赋值: 如果pizzaDiameter=SMALL\u MIN返回false,则不会分配numberOfSlices,下面的行将失败
Console.WriteLine("\nA diameter of " + pizzaDiameter + " will yield." + numberOfSlices + " slices.");
您得到错误是因为您只在if块中分配了它。 如果条件不满足怎么办?在这种情况下,它不会被初始化,因此会抛出该错误 在使用任何变量之前,编译器会检查每个可能的代码路径中的赋值 你需要做的是
int numberOfSlices=0; // Or whatever initial value you want to give
if (pizzaDiameter <= XL_MAX || pizzaDiameter >= SMALL_MIN)
{
}
else
{
}
//Then, even if you try to access it here, it won't throw any error.
注意:它不是由int(即0)初始化的,因为它不是一个类的数据成员。您没有在外部else块中分配它。不要在C中使用常数。如果您的常数是这样的话。好吧,伙计们,我明白了,你们的回答如此之快,真是太棒了@EricLippert在我的风格指南中,这就是我如何命名我的constants@SarujanPathmaranjan:我给你的建议是,你扔掉你的风格指南,取而代之的是一份框架设计指南。
int numberOfSlices=0; // Or whatever initial value you want to give
if (pizzaDiameter <= XL_MAX || pizzaDiameter >= SMALL_MIN)
{
}
else
{
}
//Then, even if you try to access it here, it won't throw any error.