代码之家  ›  专栏  ›  技术社区  ›  Riddari

数组索引越界错误

  •  6
  • Riddari  · 技术社区  · 16 年前

    全面披露 :这是家庭作业。

    这让我发疯了。我在写一个离散余弦变换函数,它基本上是完整的,但我遇到了indexoutofrange异常。

    代码如下:

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

    其中pin是:

    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}
                };
    
    3 回复  |  直到 14 年前
        1
  •  15
  •   Robert Harvey    16 年前

    这条线

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

    应该读

    for(int j = 0; j < 8; j++) 
    
                          ^
    
        2
  •  3
  •   David Pfeffer    16 年前

    你做到了:

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

    最有可能的意思是:

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

    (你做到了 我 +,而不是 j ++)

        3
  •  1
  •   David    16 年前

    在这条线上把i改成j for (int j = 0; j < 8; i++)