完全披露:这是作业作业。
这让我疯了。我正在写一个离散余弦变换函数并且基本完成它,但我遇到了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}
};
答案 0 :(得分:15)
这一行
for(int j = 0; j < 8; i++)
应该阅读
for(int j = 0; j < 8; j++)
^
答案 1 :(得分:3)
你做了:
for(int j = 0; j < 8; i++)
最有可能意味着:
for(int j = 0; j < 8; j++)
(你做了我 ++,而不是 j ++。)
答案 2 :(得分:1)
在此行将i更改为j
for (int j = 0; j < 8; i++)