Код выполняет следующие действия:
Он устанавливает постоянную с именем DEFAULT_PRIOR
(эквивалент java будет статической конечной переменной) в массив, содержащий число 2 пять раз.В java:
static final int[] DEFAULT_PRIOR = {2,2,2,2,2};
Он определяет метод с двумя аргументами с именем Score, где второй аргумент по умолчанию равен DEFAULT_PRIOR
.В Java это может быть достигнуто с перегрузкой:
float score(int[] votes) {
return score(votes, DEFAULT_PRIOR);
}
Внутри метода Score он делает следующее:
posterior = votes.zip(prior).map { |a, b| a + b }
Это создает апостериорный массив, где каждый элемент является суммойсоответствующий элемент в голосах и соответствующий элемент в предыдущем (то есть posterior[i] = votes[i] + prior[i]
).
sum = posterior.inject { |a, b| a + b }
Это устанавливает сумму, чтобы быть суммой всех элементов в posterior
.
posterior.
map.with_index { |v, i| (i + 1) * v }.
inject { |a, b| a + b }.
to_f / sum
Этот бит умножает каждый задний элемент на его индекс плюс один, а затем суммирует это.Результат преобразуется в число с плавающей точкой, а затем делится на sum
.
. В java вы должны выполнять итерацию по апостериорному с for
-loop (не foreach) и в каждой итерации добавлять (i + 1) * posterior[i]
(где i
- это индекс for
-loop) переменной tmp
, которую вы устанавливаете в 0 перед циклом.Затем вы бы разыграли tmp
до float
и поделили бы его на sum
.