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 循环中,你使用jogavel1jogavel2使用 -operator 递增它们++。这对于适用于jogavel1. 另一方面jogavel,不一定需要为其分配一个值,因为您不将其用于直接计算。相反,您只需在 if-else-statement 中为其分配一个值,这对编译器来说很好。

顺便说一句,您的逻辑中有一个错误:在您的循环中,您没有从数组中获取最后一个元素。你使用i < 7相应的。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 回答