【问题标题】:Trouble in writing the predictive rule #5 in java code在 Java 代码中编写预测规则 #5 时遇到问题
【发布时间】:2015-04-08 09:05:32
【问题描述】:

我正在编写代码来构建 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;

感谢您提供的任何建议。

【问题讨论】:

  • I wrote the following but received errors; 什么错误?您尝试实施的公式的来源在哪里?
  • array[[i-1][j]+[i-1][j-1]]/2; 这看起来不像是有效的 java 语法
  • 数组索引应该是整数。这个array[[i-1][j]+[i-1][j-1]] 是如何有效的?
  • 由于 12 分钟过去了,我们没有得到 OP 的澄清,我投票结束,因为“不清楚你在问什么”。

标签: java arrays algorithm jpeg lossless-compression


【解决方案1】:

您可能会收到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;

【讨论】:

  • 很确定存在编译错误。不要妄下结论并给出笼统的答案。仅当您可以使用发生错误超出范围的位置以及原因进行备份时,此答案才有效。在这种情况下,array[[i-1][j]+[i-1][j-1]]/2 的语法对我来说真的很臭——但我怀疑你是否费心去阅读它。
  • 我很费心去读它,虽然它乍一看并没有跳进我的眼里。我更新了我的答案以包括这个,并解释了一个可能的越界示例
  • 由于Array的索引值,代码无法编译。
  • 即使我特别提到了未编译的内容,您的编辑也没有涵盖它。没有必要急于给出没有信息的答案,“你可能有 X”(很可能不是这种情况)就是一个很好的例子。
  • 您好,感谢您帮助我澄清这个问题,我尝试了您所说的一些技术,再次为没有发布我的问题/错误而道歉。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-09
  • 1970-01-01
  • 2021-02-26
  • 2018-09-23
  • 2021-11-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多