2010-03-05 40 views
6

Tiết lộ đầy đủ: Đây là bài tập về nhà.C# Chỉ mục mảng ngoài giới hạn lỗi

Điều này khiến tôi phát điên. Tôi đang viết một hàm tách rời Cosine Transform và hoàn thành về cơ bản, nhưng tôi đang chạy vào một ngoại lệ IndexOutOfRange.

Mã là dưới đây:

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

đâu PIN là:

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

Dòng mã nào đang ném ngoại lệ? –

Trả lời

15

Dòng này

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

nên đọc

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

        ^
+0

+1 Chỉ cần đánh tôi với nó. – Pwninstein

+0

+1 ... D'oh! Vâng, những điều này xảy ra. Cảm ơn vì đã giúp tôi sửa lỗi lầm ngớ ngẩn của tôi! – Riddari

+4

@MachinationX: Đừng sửa lỗi. Hãy tự hỏi chính mình "yếu tố nào khiến tôi phạm phải sai lầm này và làm sao tôi có thể không bao giờ, làm lại lần nữa?" Yếu tố dẫn đến sai lầm là việc sử dụng các biến vô nghĩa và trực quan gần như giống hệt nhau i và j. Bạn có thể đưa ra tên cho i, j, x và y có tính mô tả và ít có khả năng dễ nhầm lẫn với nhau không? –

3

Bạn đã làm:

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

Và rất có thể có nghĩa là:

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

(Bạn đã làm i ++, không j ++.)

1

thay đổi i tới j ở đây dòng for (int j = 0; j < 8; i++)

Các vấn đề liên quan