开关变量,开关输入,情况2错误

时间:2013-09-01 16:24:29

标签: c#

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

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回答之后,如果没有任何反应,矩阵是空的。 我认为循环是问题吗?

3 个答案:

答案 0 :(得分:2)

你不应该假设用户先输入1,然后输入2,但预计这可能会反过来。

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

如果您提供初始化程序,将变量移出switch将使错误无效,但在每次迭代中它仍然是 new 变量,因此当您填入{ {1}},在下一次迭代中执行case 1时,它会变空。您需要将变量一直移出循环以使值保持不变。

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