#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.