0

以下の配列を読み取ろうとしています。私がやりたいことは、配列に番号1と2が同時に存在するかどうかを確認することです。問題は私の方法にあります。メソッド内にある「割り当てられていないローカル変数 'jogavel1' の使用」を取得し続けます。誰かが私が間違っていることを助けたり説明したりできますか? ご参加ありがとうございました =)。

        int[,] tabuleiro = new int[8, 8] {
            {1, 0, 1, 0, 1, 0, 1, 0},
            {0, 1, 0, 1, 0, 1, 0, 1},
            {1, 0, 1, 0, 1, 0, 1, 0},
            {0, 0, 0, 0, 0, 0, 0, 0},
            {0, 0, 0, 0, 0, 0, 0, 0},
            {0, 2, 0, 2, 0, 2, 0, 2},
            {2, 0, 2, 0, 2, 0, 2, 0},
            {0, 2, 0, 2, 0, 2, 0, 2},
        };

        int numero = verificar(tabuleiro);

        Console.ReadKey();
    }


    public static int verificar(int[,] tabuleiro) {
        int jogavel, jogavel1, jogavel2 = 0;
        for (int i = 0; i < 7; i++) {
            for (int a = 0; a < 7; a++) {
                if (tabuleiro[i, a] == 1) {
                    jogavel1++;
                }
                else if (tabuleiro[i, a] == 2) {
                    jogavel2++;
                }
            }
        }
        if (jogavel1 > 0 && jogavel2 > 0) {
            jogavel = 1;
        }
        else
            jogavel = 0;
        return jogavel;
    }
}
4

2 に答える 2

2

変数のインスタンス化が問題です:

int jogavel, jogavel1, jogavel2 = 0;

これを行うとjogavel2、値が割り当てられるだけになります。代わりに、次のように割り当てる必要があります。

int jogavel; // in your case this variable doesn't necessarily needs to be assigned
int jogavel1 = 0;
int jogavel2 = 0;

説明: for ループ内でjogavel1andを使用し、 -operatorjogavel2を使用してそれらをインクリメントします。++これは、に適用される未割り当ての変数では不可能ですjogavel1。一方jogavel、直接計算には使用しないため、必ずしも値を割り当てる必要はありません。代わりに、if-else ステートメントでそれに値を代入するだけです。これはコンパイラにとっては問題ありません。

ところで、ロジックにエラーがあります。ループ内では、配列から最後の要素を取得していません。i < 7respを使用します。a < 7ジャグ配列には各次元に8つの要素があるため、これは正しくありません。したがって、次のように編集することをお勧めします。

...
for (int i = 0; i < tabuleiro.GetLength(0); i++) // array-length of 1. dimension (=8)
{
    for (int a = 0; a < tabuleiro.GetLength(1); a++) // len. of 2. dimension (=8)
    ...
于 2016-03-26T10:21:23.650 に答える
0

ローカル変数は初期化されません。手動で初期化する必要があります。

だからあなたのコードは

int jogavel, jogavel1=0, jogavel2 = 0;
于 2016-03-26T10:24:01.913 に答える