2010-03-05 20 views
6

Descripción completa: Esto es para una tarea asignada.C# Índice de matriz fuera de límites error

Esto me está volviendo loco. Estoy escribiendo una función de Transformación Coseno Discreta y la tengo básicamente completa, pero me estoy encontrando con una excepción IndexOutOfRange.

Código es el siguiente:

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

Dónde PIN es:

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

¿Qué línea de código arroja la excepción? –

Respuesta

15

Esta línea

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

debe leer

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

        ^
+0

+1 Solo dame una paliza. – Pwninstein

+0

+1 ... D'oh! Bueno, estas cosas pasan. Gracias por ayudarme a solucionar mi tonto error! – Riddari

+4

@MachinationX: No solo solucione el error. Pregúntese "¿qué factor me causó cometer este error y cómo nunca más puedo volver a hacerlo?" El factor que llevó al error fue el uso de nombres de variables sin sentido y visualmente casi idénticos i y j. ¿Pueden darnos nombres para i, j, xey que sean descriptivos y con menos probabilidades de confundirse fácilmente entre sí? –

3

Hiciste:

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

Y lo más probable significado:

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

(Hiciste i ++, no j ++.)

1

cambio de i a j en este línea for (int j = 0; j < 8; i++)

Cuestiones relacionadas