Получение исключения ArrayIndexOutOfBoundsException при работе с цепями Маркова

#java #arrays #algorithm #markov-chains

#java #массивы #алгоритм #цепочки Маркова

Вопрос:

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

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

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

введите описание изображения здесь

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

Комментарии:

1. Можете ли вы показать свое объявление для markovMatrix и plotMatrix ? Когда вы пошагово просматриваете код в своем отладчике, насколько велика матрица и какого размера вы ожидаете, что она будет?

Ответ №1:

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

но для(;output < markovMatrix.length;output ) шагнет от 0 до 7, в то время как у вас есть только от 0 до 6 записей в markovMatrix.

Использование for(;output < markovMatrix.length-1;output ) устраняет исключение ArrayIndexOutOfBoundsException, переходя с 1 на 6.

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

Ответ №2:

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