2017-01-04 87 views
-5

這是我的代碼:簡單的C#錯誤

namespace ConsoleApplication3 
{ 
    class Module1 
    { 
    static void Main() 
    { 
      int i; 
      int j; 
      int[,] matriceFoglio; 
      string stringa = ""; 

      for (i = 1; (i <= 11); i++) 
      { 
       stringa = ""; 

       for (j = 1; (j <= 11); j++) 
       { 
        matriceFoglio(i, j) = 0; 
        stringa = (stringa + matriceFoglio[i,j]); 
       } 

       Console.WriteLine(stringa); 
      } 

      Console.ReadLine(); 
      // disegno l'albero di natale 
      matriceFoglio[1, 5] = 1; 
      matriceFoglio[2, 4] = 1; 
      matriceFoglio[2, 5] = 1; 
      matriceFoglio[2, 6] = 1; 
      matriceFoglio[3, 3] = 1; 
      matriceFoglio[3, 4] = 1; 
      matriceFoglio[3, 5] = 1; 
      matriceFoglio[3, 6] = 1; 
      matriceFoglio[3, 7] = 1; 
      matriceFoglio[4, 5] = 1; 
      matriceFoglio[5, 5] = 1; 

      // disegno l'albero 
      Console.WriteLine(""); 

      for (i = 1; (i <= 11); i++) 
      { 
       stringa = ""; 

       for (j = 1; (j <= 11); j++) 
       { 
        stringa = (stringa + matriceFoglio[i, j]); 
       } 

       Console.WriteLine(stringa); 
      } 

      Console.ReadLine(); 
    } 
    } 
} 

在for循環中,編譯器將引發此錯誤:

Method name expected and Use of unassigned local variable 'matriceFoglio'.

我不明白我在做什麼錯。

+2

將'int [,] matriceFoglio'改爲int [,] matriceFoglio = new int [1000,1000];'。 「爲什麼是1000?」,沒有理由。 – Quantic

+0

不是1000,而是10 –

回答

1

首先,你需要初始化數組(在這個例子中尺寸10×10):

int[,] matriceFoglio = new int[10, 10]; 

其次,用方括號來訪問數組,而不是花括號:

// replace matriceFoglio(i, j) = 0; with 
matriceFoglio[i, j] = 0; 

UPDATE 我猜,另一個錯誤與不正確的循環索引有關,基本上沒有索引爲11的元素(我假設數組大小爲10x10)。它應該是:

for (i = 0; i < 10; i++) 
{ 
    for (j = 0; j < 10; j++) 
    { 
    } 
} 
+0

是的,我已經做到了,它是正確的,但是如果我啓動調試還有另一個錯誤。 –

+0

@MatteoCollimedaglia我已經更新了我的答案,但我只是在猜測。 – Zbigniew

+0

我被低估了,我的回答有什麼問題? – Zbigniew

1

您需要使用新的初始化matriceFoglio:也

matriceFoglio = new int[10,10]; 

當你分配一個值matriceFoglio,你需要使用括號[],而不是括號,如

matriceFoglio[i,j] = 0; 
2

我知道其他人指出了這一點,但只是在這裏添加一些東西。這裏有兩個錯誤,兩者幾乎都是編譯器所說的。第一個:

matriceFoglio(i, j) = 0; 

這不是正確的語法 - 這是方法調用的語法,而不是數組賦值。這就是爲什麼編譯器期望這是一個方法名稱。這實際上應該是

matriceFoglio[i, j] = 0; 

此外,當您使用它int[,] matriceFoglio;沒有初始化,所以編譯器的絕對正確這裏。你必須在使用之前創建數組 - 你不能只是開始分配給它。要理解這是爲什麼,首先考慮數組是如何實際實現的:假設你要實現一個大小爲10的數組。當你初始化數組時,運行時將在存儲器中「佈局」10個連續位置並存儲第一個項目。數組索引是從初始地址偏移的 - 這就是爲什麼第一個項目是項目0(沒有偏移量,根據定義,第一個項目在指針位置)。但是,如果要訪問陣列中的第五項,則其位置爲(address of the first item) + (32 * 4)(假定爲32位地址)。這就是爲什麼你可以做恆定的隨機訪問 - 找到一個任意位置只是指針算術。