在java代码中编写预测规则#5时遇到麻烦

时间:2015-04-08 09:05:32

标签: java arrays algorithm jpeg lossless-compression

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

我'[i,j] =我[i,j-1] +我[[i-1,j] +我[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;

感谢您提供的任何建议。

1 个答案:

答案 0 :(得分:-2)

你可能会得到ArrayIndexOutOfBoundException s。

在第一次迭代(i=0)时,i-1将等于-1,其中您的数组超出范围。

始终检查数组边界,并制定计划,如果您不在界外该怎么办

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;