Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么双面积=0;?_C# - Fatal编程技术网

C# 为什么双面积=0;?

C# 为什么双面积=0;?,c#,C#,只是一个新手到c寻求一些指导 在下面的代码中如果我使用了双区域;这会给我一个错误:使用未分配的局部变量区域。我必须把双面积=0 我的问题是为什么?为什么我必须给它赋值。我以前从来没有这样做过,所以我有点困惑 提前感谢您的回复 int userValue, rad, heightOfRectangle, widthOfRectangle, baseOfTriangle, heightOfTriangle; double area = 0; Consol

只是一个新手到c寻求一些指导

在下面的代码中如果我使用了双区域;这会给我一个错误:使用未分配的局部变量区域。我必须把双面积=0

我的问题是为什么?为什么我必须给它赋值。我以前从来没有这样做过,所以我有点困惑

提前感谢您的回复

      int userValue, rad, heightOfRectangle, widthOfRectangle, baseOfTriangle, heightOfTriangle;
        double area = 0;

        Console.Write("\n\n");
        Console.Write("Calculating Area of Geometrical Shape\n");
        Console.Write("=======================================\n");
        Console.Write("\n\n");
        Console.Write("Please select 1 for Circle, 2 for Rectangle and 3 for Triangle: ");

        userValue = Convert.ToInt32(Console.ReadLine());

        switch (userValue)
        {
            case 1:
                Console.Write("Please Enter Radius of Circle: ");
                rad = Convert.ToInt32(Console.ReadLine());
                area = 3.14 * rad * rad;
                break;

            case 2:
                Console.Write("Please enter Height of Rectangle: ");
                heightOfRectangle  = Convert.ToInt32(Console.ReadLine());
                Console.Write("Please enter Width of Rectangle: ");
                widthOfRectangle = Convert.ToInt32(Console.ReadLine());
                area = widthOfRectangle * heightOfRectangle;
                break;

            case 3:
                Console.Write("Please enter Base of Triangle: ");
                baseOfTriangle = Convert.ToInt32(Console.ReadLine());
                Console.Write("Please enter height of Triangle: ");
                heightOfTriangle = Convert.ToInt32(Console.ReadLine());
                area = .5 * baseOfTriangle * heightOfTriangle;
                break;

        }

        Console.WriteLine("\nThe area is {0}", area);
假设用户输入123打开

请选择1表示圆形,2表示矩形,3表示三角形:

问题。在这种情况下,不会分配区域,不会执行任何案例,并且

 Console.WriteLine("\nThe area is {0}", area);

不知道要输出什么

错误的原因是,可能会出现switch语句中的任何情况-例如,用户输入错误


此外,局部变量未使用默认值初始化,因此,如果执行非case语句,则area没有值。如上所述,初始化变量以确保其具有值,并通过在未分配任何值的情况下调用它来避免可能的异常错误,这是一种良好的做法。此外,添加一个goto放置将允许您返回到起点,尽管我希望您为此创建单独的方法

        int userValue, rad, heightOfRectangle, widthOfRectangle, baseOfTriangle, heightOfTriangle;
        double area;

        Console.Write("\n\n");
        Console.Write("Calculating Area of Geometrical Shape\n");
        Console.Write("=======================================\n");
        Console.Write("\n\n");

        Start:

        Console.Write("Please select 1 for Circle, 2 for Rectangle and 3 for Triangle: ");

        userValue = Convert.ToInt32(Console.ReadLine());

        switch (userValue)
        {
            case 1:
                Console.Write("Please Enter Radius of Circle: ");
                rad = Convert.ToInt32(Console.ReadLine());
                area = 3.14 * rad * rad;
                break;

            case 2:
                Console.Write("Please enter Height of Rectangle: ");
                heightOfRectangle = Convert.ToInt32(Console.ReadLine());
                Console.Write("Please enter Width of Rectangle: ");
                widthOfRectangle = Convert.ToInt32(Console.ReadLine());
                area = widthOfRectangle * heightOfRectangle;
                break;

            case 3:
                Console.Write("Please enter Base of Triangle: ");
                baseOfTriangle = Convert.ToInt32(Console.ReadLine());
                Console.Write("Please enter height of Triangle: ");
                heightOfTriangle = Convert.ToInt32(Console.ReadLine());
                area = .5 * baseOfTriangle * heightOfTriangle;
                break;
            default:
                goto Start;
        }

        Console.WriteLine("\nThe area is {0}", area);
        Console.Read();

如果userValue等于4,会发生什么情况?如果不初始化面积,面积的值是多少?它被称为防御性编程。为了获得最佳实践,请在switch语句中放入默认大小写在您的switch语句中缺少默认大小写意味着存在可能的执行路径,导致区域在读取之前未初始化。感谢您的澄清。Variable area是一种值类型,它永远不会为null,因为它不是有效值。它将只是未初始化,无法通过编译。感谢您的回复。我喜欢这样开始。这对我来说是新的,我想我会从现在开始使用它非常感谢您的回复。我现在明白了。