0

線を描画するための一連の座標を格納する配列があります。ここにいくつかの例の座標があります

double[][] plotMatrix = {{10,20},{55,80},
                         {120,40},{225,30},
                         {327.5,100},
                         {427.5,30},
                         {529,60}};

次のステップは、2 次元のマルコフ行列を作成することです。

ここに画像の説明を入力

最初に、左の列のポイントの後に上の列のポイントが続く回数を数えます。線が必要なので、各ポイントの後に別の単一のポイントが続きます。つまり、入力として {10,20} がある場合、次のポイントである {55,80} の確率は 100% です。

これについてはよくわからないので、訂正してください!

これが私のマトリックスです

double[][] markovMatrix = { {0.0,1.0,0.0,0.0,0.0,0.0,0.0},
                                    {0.0,0.0,1.0,0.0,0.0,0.0,0.0},
                                    {0.0,0.0,0.0,1.0,0.0,0.0,0.0},
                                    {0.0,0.0,0.0,0.0,1.0,0.0,0.0},
                                    {0.0,0.0,0.0,0.0,0.0,1.0,0.0},
                                    {0.0,0.0,0.0,0.0,0.0,0.0,1.0},
                                    {0.0,0.0,0.0,0.0,0.0,0.0,0.0}};

私のアルゴリズム:

    int seed = 0;
    int output = 0;

    for(int i = 0; i < 40;i++){
        double choice = r.nextDouble();

        double currentSum = 0.0;

        for(;output < markovMatrix.length;output++){

            currentSum += markovMatrix[seed][output];

            if(choice <= currentSum){
                break;
            }
        }

        System.out.println(output);
        polygon.lineTo(plotMatrix[output][0], plotMatrix[output][1]);

        seed = output;

        output = 0;
    }

私の問題は、ArrayOutOfBoundsException:7plotMatrix と markovMatrix の両方にアクセスしようとするとエラーが発生することです。ただし、出力は各ループの最後で 0 に設定されます。その問題を解決する方法はありますか?

4

2 に答える 2

3

正しい答えかどうかはわかりませんが、

ただし、for(;output < markovMatrix.length;output++) は 0 から 7 に進みますが、markovMatrix には 0 から 6 のエントリしかありません。

for(;output < markovMatrix.length-1;output++) を使用すると、1 から 6 にステップすることで ArrayIndexOutOfBoundsException が修正されます。

しかし、あなたは本当に 0 から 6 にステップアップしたいと思っているのではないでしょうか。そこに問題があります。

于 2011-05-30T15:07:57.417 に答える
1

配列の長さである内部ループ出力= 7でループが完了すると。配列インデックスが 0 から 6 であるため、最後の反復をスキップすることになっています。

于 2011-05-30T15:08:53.087 に答える