2017-01-04 1 views
-5

Dies ist mein Code:Einfach C# Fehler

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

In der for-Schleife der Compiler diesen Fehler führt:

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

Ich verstehe nicht, was ich falsch mache.

+2

Ändern Sie 'int [,] matriceFoglio' in' int [,] matriceFoglio = new int [1000,1000]; '. "Warum 1000?", Kein Grund. – Quantic

+0

nein 1000, aber 10. –

Antwort

1

Zunächst müssen Sie Ihre Array (Größe 10x10 in diesem Beispiel) initialisieren:

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

Zweitens verwenden eckige Klammern Array anstelle von geschweiften Klammern zuzugreifen:

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

UPDATE Ein anderer Fehler, denke ich, bezieht sich auf falsche Schleifenindizes, grundsätzlich gibt es kein Element mit Index 11 (ich nehme an, dass die Arraygröße 10x10 ist). Es sollte sein:

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

Ja, ich habe es getan und es ist korrekt, aber wenn ich Debug starte, gibt es einen anderen Fehler. –

+0

@MatteoCollimedaglia Ich habe meine Antwort aktualisiert, aber ich rate nur. – Zbigniew

+0

Ich wurde abgelehnt, was stimmt nicht mit meiner Antwort? – Zbigniew

1

Sie müssen matriceFoglio initialisieren mit neu:

matriceFoglio = new int[10,10]; 

Auch wenn Sie einen Wert matriceFoglio zuweisen, müssen Sie Klammern [] anstelle von Klammern wie

verwenden
matriceFoglio[i,j] = 0; 
2

Ich weiß, andere Leute haben darauf hingewiesen, aber nur um ein paar Dinge hier hinzuzufügen. Es gibt hier zwei Fehler, von denen beide ziemlich genau das sind, was der Compiler gesagt hat. Zuerst:

matriceFoglio(i, j) = 0; 

Dies ist nicht die richtige Syntax - das ist die Syntax für einen Methodenaufruf, nicht Array-Zuweisung. Deshalb erwartet der Compiler, dass dies ein Methodenname ist. Dies sollte eigentlich

matriceFoglio[i, j] = 0; 

Auch sein wird int[,] matriceFoglio; nicht initialisiert, wenn Sie es verwenden, so absolut der Compiler die richtige hier auch. Sie müssen das Array vor der Verwendung erstellen - Sie können es nicht einfach zuweisen. Um zu verstehen, warum dies der Fall ist, sollten Sie zunächst überlegen, wie Arrays tatsächlich implementiert werden: Angenommen, Sie würden ein Array der Größe 10 implementieren. Wenn Sie das Array initialisieren, verteilt die Laufzeitumgebung 10 aufeinander folgende Speicherorte und speichert den Speicherort des ersten Artikel. Der Array-Index ist ein Offset von der Anfangsadresse - deshalb ist das erste Element das Element 0 (es gibt keinen Offset, per Definition befindet sich das erste Element an der Zeigerposition). Wenn Sie jedoch auf das fünfte Element in dem Array zugreifen möchten, ist sein Speicherort (address of the first item) + (32 * 4) (32-Bitadressen vorausgesetzt). Deshalb können Sie einen wahlfreien Zugriff mit konstanter Zeit durchführen - das Finden eines beliebigen Ortes ist nur Zeigerarithmetik.