Получение ArrayIndexOutOfBoundsException при работе с цепями Маркова - PullRequest
0 голосов
/ 30 мая 2011

У меня есть массив для хранения набора координат для рисования отрезка линии. Итак, вот несколько примеров координат

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

Следующим шагом является создание двумерной матрицы Маркова.

enter image description here

Сначала я считаю время, когда за точкой из левого столбца следует точка в верхнем столбце. Поскольку я хочу линию, за каждой точкой следует еще одна отдельная точка. Это означает, что если на входе у нас {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:7, когда пытаюсь получить доступ к plotMatrix и markovMatrix. Однако выход устанавливается на 0 в конце каждого цикла. Есть идеи, как решить эту проблему?

Ответы [ 2 ]

3 голосов
/ 30 мая 2011

Я не совсем уверен, правильный ли это ответ,

но для (; output

Использование for (; output

Однако я подозреваю, что вы действительно хотите перейти с 0 на 6. И в этом ваша проблема.

1 голос
/ 30 мая 2011

Когда закончите цикл с выходом внутреннего цикла = 7, который является длиной массива. Предполагается, что вы пропустите эту последнюю итерацию, потому что ваши индексы массива от 0 до 6.

...