This question already has answers here:
c# switch problem

(8个答案)


7年前关闭。




我收到以下错误。使用未分配的局部变量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的值进行赋值之前引用了i的值时,检测到程序中存在路径。具体来说,这将在嵌套循环的第一个迭代期间发生,当jif (i != j)均为零时:不会执行包含分配的markduplicate块,因此if的值将在接下来的ojit_code语句。

要解决此问题,请更改

bool markduplicate;


bool markduplicate = false;

在声明中。

10-04 20:40