c#多维数组验证
c# Multi-Dimensional Array verification
我正在尝试读取下面的数组。我想要做的只是验证数组中是否同时存在数字 1 和 2。问题出在我的方法上。我一直在我的方法中得到一个 "use of unassigned local variable '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;
}
}
你的变量实例化有问题:
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 循环中,您使用 jogavel1
和 jogavel2
并使用 ++
运算符递增它们。这对于适用于 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)
...
局部变量未初始化。您必须手动初始化它们。
所以你的代码应该是
int jogavel, jogavel1=0, jogavel2 = 0;
我正在尝试读取下面的数组。我想要做的只是验证数组中是否同时存在数字 1 和 2。问题出在我的方法上。我一直在我的方法中得到一个 "use of unassigned local variable '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;
}
}
你的变量实例化有问题:
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 循环中,您使用 jogavel1
和 jogavel2
并使用 ++
运算符递增它们。这对于适用于 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)
...
局部变量未初始化。您必须手动初始化它们。
所以你的代码应该是
int jogavel, jogavel1=0, jogavel2 = 0;