C#使用未分配的变量

时间:2014-08-08 01:24:14

标签: c#

嗯,我想知道为什么这不起作用......它给出了一个错误陈述"使用未分配的局部变量max"。那么,这段代码有什么问题?我弄清楚了。

namespace ConsoleApplication1
{
    class Program
    {
        public int CalculateHighestNum(int value1, int value2, int value3) 
        {
            int max;

            if (value1 > (value2 & value3))
            {
                max = value1;
            }
            else if(value2 > (value1 & value3))
            {
                max = value2;
            }
            else if(value3 > (value1 & value2)) 
            {
                max = value3;
            }

            return max;
        }

        static void Main(string[] args) 
        {
            Console.Write("Enter first NUM : ");
            int a = Convert.ToInt32(Console.ReadLine());
            Console.Write("Enter second NUM : ");
            int b = Convert.ToInt32(Console.ReadLine());
            Console.Write("Enter third NUM : ");
            int c = Convert.ToInt32(Console.ReadLine());


            Program p = new Program();
            int highestnum = p.CalculateHighestNum(a, b, c);

            Console.WriteLine(highestnum + " = Highest Number");
        }
    }

1 个答案:

答案 0 :(得分:4)

在使用之前,您需要将初始值设置为max或任何其他局部变量。

int max = 0;

这样做的原因是为了减少使用变量的可能性而不为其赋予合理的默认值,并且因为变量需要在返回之前分配给某个变量。 (在这种情况下,如果您的if语句都是假的)

如果在所有情况下为变量赋值,编译器将不会显示此错误,例如在else语句中。

另外,正如@Partha在评论中解释的那样,您可以将逻辑简化为:

return Math.Max(value1, Math.Max(value2, value3));