0

欢迎,我在开关中遇到了小功能的问题。我的问题是“使用未分配的局部变量'矩阵'”这是一个代码:

static void Main(string[] args)
    {

        char wyj = 'n';
        do
        {
            Console.WriteLine("1. add numbers into matrix \n2. show matrix \n3. end");
            int a;
            Console.Write("\nYour choice: ");
            a = int.Parse(Console.ReadLine());

            switch (a)
            {
                case 1:
                    Console.WriteLine("You choose: 1");

                    int element;
                    Console.Write("\nsize of matrix: ");
                    int matrixsize;
                    matrixsize = Int32.Parse(Console.ReadLine());
                    int[,] matrix = new int[matrixsize, matrixsize];

                    for (int i = 0; i <= matrixsize - 1; i++)
                    {
                        for (int j = 0; j <= matrixsize - 1; j++)
                        {
                            Console.Write("element{0},{1} =", i + 1, j + 1);
                            element = int.Parse(Console.ReadLine());
                            matrix[i, j] = element;
                        }
                    }
                    break;

                case 2:
                    Console.WriteLine("You choose 2");
                    foreach (int x in matrix)
                        Console.Write(x);
                        break;

                case 3:
                    Console.WriteLine("End the program? y- yes, n- no");
                    wyj = char.Parse(Console.ReadLine());
                    break;

            }
        }
        while (wyj != 'y');
        Console.WriteLine("Koniec programu!");

        Console.ReadKey();
    }

我需要做什么?

在 Doc Brown 回答后,如果 2 没有任何反应,则矩阵为空。我认为循环是问题所在?

4

3 回答 3

2

您不应该假设用户先输入 1,然后输入 2,而是期望这可能会反过来发生。

  • 声明int[,] matrix必须在 switch 语句之前完成,并且您应该在此处将变量设置为 nullint[,] matrix=null;
  • 初始化matrix = new int[matrixsize, matrixsize]可以保持原样,但是
  • case 2块中,您必须检查矩阵是否已初始化if(matrix!=null) {/*...*/}
于 2013-09-01T16:41:12.650 回答
0

您假设编译器无法验证 - 您将始终生成正在形成的矩阵查看它。编译器知道在 switch 语句中不一定是这种情况,因此它会阻止您使用可能从未设置过的变量(或者在这种情况下,甚至声明过)。如果要保留此代码,请在案例之外声明变量并将其初始化为新矩阵。然后检查情况二是否可以安全显示。

于 2013-09-01T16:40:59.887 回答
0

matrix变量是交换机的本地变量。使用case 2变量 from case 1,因为case没有引入范围,但它从不在那里初始化,因为初始化器在 do 时没有执行case 2

如果您提供初始化程序,将变量移出switch将消除错误,但在每次迭代中它仍将是一个变量,因此当您将其填入时,在下一次迭代case 1时它将变为空。case 2您需要将变量一直移出循环才能使值保持不变。

您仍然不应该假设用户以正确的顺序提供输入,因此case 2您必须检查矩阵是否已填写。

于 2013-09-02T07:51:50.973 回答