0

我必须构建一个程序,该程序采用比萨饼的直径并找到它可以容纳多少片以及每个切片的面积,比萨饼,它用常量定义比萨饼的大小,但是“int numberOfSlice”出现错误它是说使用未分配的局部变量,甚至认为我正在分配考虑 if 语句。

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

        }      






    }
}

}

4

4 回答 4

4

有错误告诉你你需要知道的一切。您的numberOfSlices变量未正确初始化。在使用它之前,必须沿每个可能的代码路径为其分配一个值。

尝试在声明时对其进行初始化:

int numberOfSlices = 0;

或者,您可以if更仔细地构建您的 -blocks 以避免此错误:

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块内使用,保证在使用之前为其分配一个值。

于 2013-10-14T04:02:20.547 回答
2

该变量在外部else块中仍未分配:

if (pizzaDiameter <= XL_MAX || pizzaDiameter >= SMALL_MIN)
{
}
else
{
    // unassigned here
}
于 2013-10-14T04:02:33.507 回答
1

如果if (pizzaDiameter <= XL_MAX || pizzaDiameter >= SMALL_MIN)返回 false 则numberOfSlices不会被分配,并且下面的行将失败。

  Console.WriteLine("\nA diameter of " + pizzaDiameter + " will yield." + numberOfSlices + " slices.");
于 2013-10-14T04:03:10.847 回答
1

您收到错误是因为您仅在 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)初始化的,因为它不是类的数据成员。

于 2013-10-14T04:04:05.843 回答