我正在编写代码来构建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;
感谢您提供的任何建议。
答案 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;