2010-03-05 26 views
6

Volle Offenlegung: Dies ist für eine Hausaufgabe.C# Array-Index außerhalb der Grenzen Fehler

Das macht mich verrückt. Ich schreibe eine Discrete Cosine Transformationsfunktion und habe sie im Grunde abgeschlossen, aber ich stoße auf eine IndexOutOfRange-Ausnahme.

-Code ist unten:

static int[][] DiscreteCosineTransform(int[][] pIn) 
     { 
      int[][] cosP = pIn; 
      double SumCosP = 0; 
      double Cx = 0; 
      double Cy = 0; 
      Console.WriteLine("Discrete Cosine Transformed Array:"); 
      for(int i = 0; i < 8; i++) 
      { 
       if (i == 0) 
        Cx = 1/Math.Sqrt(2); 
       else 
        Cx = 1; 
       for(int j = 0; j < 8; i++) 
       { 
        if (j == 0) 
         Cy = 1/Math.Sqrt(2); 
        else 
         Cy = 1; 

        for (int x = 0; x < 8; x++) 
        { 
         for (int y = 0; y < 8; y++) 
         { 
          SumCosP += cosP[x][y] * Math.Cos(((2 * x + 1) * i * Math.PI)/16) * Math.Cos(((2 * y + 1) * j * Math.PI)/16); 
         } 
        } 
        pIn[i][j] = (int)(0.25 * Cx * Cy * SumCosP); 
        Console.Write(" " + pIn[i][j] + " "); 
       } 
       Console.WriteLine(); 
      } 
      Console.WriteLine(); 
      return pIn; 
     } 

Wo pIn ist:

int[][] P = new int[][] 
      { 
       new int[]{10,10,10,10,10,10,10,10}, 
       new int[]{10,20,20,20,20,20,20,10}, 
       new int[]{10,20,30,30,30,30,20,10}, 
       new int[]{10,20,30,40,40,30,20,10}, 
       new int[]{10,20,30,40,40,30,20,10}, 
       new int[]{10,20,30,30,30,30,20,10}, 
       new int[]{10,20,20,20,20,20,20,10}, 
       new int[]{10,10,10,10,10,10,10,10} 
      }; 
+2

Welche Codezeile wirft die Ausnahme? –

Antwort

15

Diese Linie

for(int j = 0; j < 8; i++) 

lesen sollte

for(int j = 0; j < 8; j++) 

        ^
+0

+1 Schlagen Sie mich einfach dazu. – Pwninstein

+0

+1 ... D'oh! Nun, diese Dinge passieren. Danke, dass du mir geholfen hast, meinen dummen Fehler zu beheben! – Riddari

+4

@MachinationX: Nicht nur den Fehler beheben. Fragen Sie sich: "Welcher Faktor hat mich veranlasst, diesen Fehler zu begehen und wie kann ich es nie wieder tun?" Der Faktor, der zu dem Fehler führte, war die Verwendung von bedeutungslosen und visuell fast identischen Variablennamen i und j. Können Sie sich Namen für i, j, x und y einfallen lassen, die beschreibend sind und weniger leicht miteinander verwechselt werden können? –

3

Sie haben:

for(int j = 0; j < 8; i++) 

Und wahrscheinlich gemeint:

for(int j = 0; j < 8; j++) 

(Du hast i ++, nicht j ++.)

1

Änderung i an, dies zu j Linie for (int j = 0; j < 8; i++)

Verwandte Themen