2

宿題をしようとしています。次に移動する人が勝ち負けの状態にあるかどうかを表示するには、動的計画法を使用する必要があります。私は実際の問題について助けを必要としません、私はそれが私を困惑させている範囲外の例外のインデックスについて助けを必要としています。forループだけを調べる必要があるため、ここにコードの一部を貼り付けるだけです。また、クラスの誰もが私のすべてのコードを見てコピーすることを望んでいません。さらにデータが必要な場合はお知らせください。だからここにコードがあります:

if(primeArray[x] == true){
    for(int i = 1; i <= x; i++){
        if(primeArray[i]== true){
            newRowNumber = x - i;
        }
        if(dynaProgram[newRowNumber][columnNumber] < minimum){
            minimum = dynaProgram[newRowNumber][columnNumber];
        }
    }
}
//COMPOSITE CASE FOR X!
else{
    for(int k = 1; k <= x; k++){
        if((primeArray[k] == false)){
            newRowNumber = x - k;
        }
        if(dynaProgram[newRowNumber][columnNumber] < minimum){
            minimum = dynaProgram[newRowNumber][columnNumber];
        }
    }

何らかの理由でif(primeArray[i] == true正しく実行されますが、でインデックスの範囲外の例外が発生しif(primeArray[k] == falseます。これら2つの違いは、forループで変数k over iを使用していることだけです(forループは同じです)。コード内の他の場所ではどちらの変数も使用していません。なぜこれが一方に発生するのか、もう一方には発生しないのかわかりません。どちらの場合も、xは同じ数のままです。

また、最初のエラーが発生していなくても、2番目のインデックスの範囲外例外がminimum = dynaProgram[newRowNumber][columnNumber]発生しています。おそらくばかげたエラーだとは思いますが、理解できません。'k' forループをk < x範囲外のインデックスに変更すると、if(primeArray[k] == false行の例外はなくなりますが、正しくありません。(ただし、2番目のエラーは解消さminimum = dynaProgram[newRowNumber][columnNumber]れません。)

このコードはすべて、ネストされたforループ内にあり、テーブル内の行と列を繰り返して入力します。上記のコードを削除してそのまま置くdynaProgram[rowNumber][columnNumber] = 1と、問題は発生しないので、それが問題。

4

1 に答える 1

0

長さ 5 の配列にアクセスする場合 (例)

int[] fred = new int[5];

最初の要素は にfred[0]なり、最後の要素はfred[4]

したがって、次のようなことをするとき:

    if(primeArray[i]== true){

i配列の長さよりも小さいことを確認してください。i配列の長さと等しい値を使用すると、例外がスローされます。

于 2012-11-30T04:53:21.917 に答える