-3

我正在编写代码来构建 JPEG 预测规则 #5 的算法,该规则指出:

I'[i,j] = I[i, j-1] + I[[i-1, j] + I[i-1, j-1]]]/2

我之前构建了一个满足规则 #4 条件的算法,我使用的代码行是:

arrayshift[i][j] = originalarray[i - 1][j - 1];

代码将单元格从 i-1 和 j-1 的位置复制到数组中的 i,j。

谁能告诉我如何写,如果不能解释如何为上述规则编写代码行。我写了以下但收到错误;

arrayshift[i][j] = originalarray[i][j-1] + array[[i-1][j]+[i-1][j-1]]/2;

感谢您提供的任何建议。

4

1 回答 1

-2

你可能会得到ArrayIndexOutOfBoundExceptions。

对于您的第一次迭代 ( i=0),i-1将等于 -1,您的 Array 超出范围。

始终检查您的阵列边界,并计划在超出范围时该怎么做

if((i-1) < 0 || (i+1) > arraysize) //for example here you should stop your iteration 
//or do something else

另一个可能的问题可能是以下行:

arrayshift[i][j] = originalarray[i][j-1] + array[[i-1][j]+[i-1][j-1]]/2;, 你在一个地方声明,originalarray...但另一方面你array用于第二个操作数,你可能也想originalarray使用

您的数组索引也是错误的。

您的公式说明了以下内容:

I[I[i-1,j] + I[i-1,j-1]]/2所以你可能想要这样的东西:

originalarray[originalarray[i-1,j]+originalarray[i-1,j-1]]/2

但是您应该将这些值保存在变量中

int val1 = originalarray[i-1,j];
int val2 = originalarray[i-1,j-1];

arrayshift[i][j] = originalarray[i][j-1] + originalarray[val1+val2]/2;

对于此公式的第二部分,您的第二个索引缺失。所以你需要更新公式以包含某种第二个索引(也许 val1 和 val2 是索引?)

arrayshift[i][j] = originalarray[i][j-1] + originalarray[val1][val2]/2;
于 2015-04-08T09:09:00.843 回答