gpt4 book ai didi

Java 数组在退出 for 循环后变为零

转载 作者:行者123 更新时间:2023-12-01 17:25:11 25 4
gpt4 key购买 nike

我正在使用我在网上找到的 FFT 类来计算图像的 FFT。这是计算 FFT 的代码。

在本例中,w(宽度)和 h(高度)是相同的值。

FFT2 fft = new FFT2(w);
double[] realRow = new double[w];
double[] imagRow = new double[w];
double[][] realVals1 = new double[w][h];
double[][] imagVals1 = new double[w][h];

for (int y = 0; y < h; y++)
{
for (int x = 0; x < w; x++)
{
pixel = bmporiginal.getPixel(x, y);
R = (int) (Color.red(pixel));
G = (int) (Color.green(pixel) );
B = (int) (Color.blue(pixel));

I = ((R+G+B)/3);
I *= Math.pow(-1, (x+y) % 2.0 );
realRow[x] = I;
imagRow[x] = 0.0;
}
fft.fft(realRow, imagRow);
realVals1[y] = realRow;
imagVals1[y] = imagRow;
}

我需要的值存储在 realVals 和 ImagVals 中。我可以在 for 循环中打印这些值并获得良好的值。离开 for 循环后,我再次打印它们,但什么也没得到!可能是什么问题呢?感谢您的帮助!

最佳答案

您在循环的每次迭代中重复使用相同的行数组。

因此,在两个循环结束时,您的 realVals1imagVals1 将分别拥有对同一数组的 h 引用。您需要在外循环的每次迭代中创建一个新数组:

for (int y = 0; y < h; y++)
{
double[] realRow = new double[w];
double[] imagRow = new double[w];

for (int x = 0; x < w; x++)
{
...
}
fft.fft(realRow, imagRow);
realVals1[y] = realRow;
imagVals1[y] = imagRow;
}

此外,我相信您对 realVals1imagVals1 的声明 a) 效率低下,b) 方向错误。我怀疑你想要:

double[][] realVals1 = new double[h][];
double[][] imagVals1 = new double[h][];

无论如何你都会替换元素,所以填充一堆空行是没有意义的......

关于Java 数组在退出 for 循环后变为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15534282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com