0

我正嘗試讀取下面的數組。我想要做的只是驗證數組1和數組2是否同時存在。問題出在我的方法上。我一直得到「使用未分配的局部變量'jogavel1'」,這是我的方法。有人可以幫助或解釋我做錯了什麼嗎?非常感謝您的參與=)。c#多維數組驗證

 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; 
    } 
} 

回答

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和使用++ - 運算符遞增它們。對於未分配的變量,這是不可能的,這適用於jogavel1。另一方面,jogavel不一定需要分配一個值,因爲您不用它來進行直接計算。相反,你只需在你的if-else語句中給它賦值,這對編譯器來說很好。

順便說一句,你的邏輯有一個錯誤:在你的循環中,你不會從數組中獲取最後一個元素。您使用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) 
    ... 
+0

非常感謝!這就是我期待的! =) –

0

局部變量沒有被初始化。你必須手動初始化它們。

所以,你的代碼應該是

int jogavel, jogavel1=0, jogavel2 = 0;