为什么我在C#编译器"未分配的局部变量"中得到此错误?

时间:2013-04-02 01:01:08

标签: c# arrays compiler-errors duplicates unassigned-variable

我收到以下错误。使用未分配的局部变量markduplicate。我不明白为什么?该程序在数组中找到重复项。我一直想弄清楚,我觉得我很近。谢谢你的帮助。

using System;

class duplicate 
{
    static void Main() 
    {
    const int Array_Size = 5;
    int [] number = new int [Array_Size];
    int i;

    for ( i = 0; i < Array_Size; i++) 
    {
        Console.Write("Element " + i + ":    ");
        number[i] = Int32.Parse(Console.ReadLine());
        if (number[i] < 9 || number[i] > 101)
        {
            Console.WriteLine("Enter Number between 10 - 100");
            number[i] = Int32.Parse(Console.ReadLine());
        }
    }

    bool markduplicate;
    for (i = 0; i < Array_Size; i++)
    {
        for (int j = 0; j < Array_Size; j++) 
        {
            if (i != j)
            {
                if (number[j] == number[i])
                {
                    markduplicate = true;
                }
            }

            if (markduplicate != true) 
            {
                Console.WriteLine("Element " + i + "    " + number[i]);
            }
        }
    }
}

}

5 个答案:

答案 0 :(得分:4)

这是因为C#的代码分析器在对markduplicate进行任何赋值之前将i的值引用时检测到有通过程序的路径。具体来说,这将在嵌套循环的第一次迭代期间发生,当jif (i != j)都为零时:包含赋值的markduplicate块将不会执行,因此if的值将在下一个bool markduplicate; 语句中被检索。

要解决此问题,请更改

bool markduplicate = false;

{{1}}
声明中的

答案 1 :(得分:1)

编译器认为您可以在设置if (markduplicate != true)之前点击markduplicate行。

如果您认为编译器是错误的,请在声明编译时给它一个值bool markduplicate = true;。如果您分析并认为编译器是正确的,请相应地调整代码。

另外:if (markduplicate != true)被认为是不好的风格。请改用if(!markduplicate)

答案 2 :(得分:0)

你已经声明了布尔变量markduplicate,但你没有给它一个初始值 - 编译器不知道它应该是最初是真还是假。

在这种情况下,很明显你希望它最初是假的,所以把它放在:

bool markduplicate = false;

现在将编译。

答案 3 :(得分:0)

在您的代码中,(i != j)在为真之前为false,因此您检查的变量值没有分配给它。

您需要在声明处为markduplicate指定一个值,或者您需要确保导致对其值进行条件检查的任何路径都首先为其指定了值。

答案 4 :(得分:0)

您必须在声明中将markdefault分配给truefalse。否则,如果number [j] != number [i],则不会分配markdefault,并且无法评估if markduplicate != true