-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 に等しくなります。

常に配列の境界を確認し、範囲外の場合の対処方法を計画してください

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で、おそらく同様に使用したい2番目のオペランドに使用し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;

この数式の 2 番目の部分では、2 番目のインデックスがありません。したがって、数式を更新して、ある種の 2 番目のインデックスを含める必要があります (おそらく、val1 と val2 がインデックスですか?)

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