为什么我在 C# 编译器"Unassigned Local 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]);
            }
        }
    }
}

}

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

要解决这个问题,修改

bool markduplicate;

bool markduplicate = false;

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

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

也:if (markduplicate != true)被认为是糟糕的风格。

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

在这种情况下,很明显你希望初始值为false,所以输入:

bool markduplicate = false;

在您的代码中,(i != j)在为真之前为假,因此您正在检查您的变量的值,该变量没有任何赋值给它。

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

您必须在声明中将markdefault分配给truefalse

如果number [j] != number [i],则markdefault不能赋值,if markduplicate != true不能求值。

相关内容

  • 没有找到相关文章

最新更新