0

ようこそ、スイッチの小さな機能に問題があります。私の問題は「割り当てられていないローカル変数 'matrix' の使用」です。コードは次のとおりです。

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 を入力すると想定するべきではありませんが、これが逆に発生する可能性があることを想定してください。

  • 宣言はswitchステートメントのint[,] matrixに行う必要があり、そこで変数をnullに設定する必要がありますint[,] matrix=null;
  • 初期化matrix = new int[matrixsize, matrixsize]はそのままで構いませんが、
  • case 2ブロックで、行列が初期化されているかどうかを確認する必要がありますif(matrix!=null) {/*...*/}
于 2013-09-01T16:41:12.650 に答える
0

あなたは、コンパイラが検証できないという前提を立てました。つまり、行列を常に生成し、表示しながら形成するという前提です。コンパイラは、これが switch ステートメントのケースである必要がないことを認識しているため、設定されていない可能性がある (またはこの場合は宣言されている) 変数を使用できないようにします。このコードを保持したい場合は、ケースの外で変数を宣言し、新しい行列に初期化します。次に、ケース 2 で表示しても安全かどうかを確認します。

于 2013-09-01T16:40:59.887 に答える