La traduction du code Ruby pour Java
Question
Je n'ai jamais utilisé ruby, mais besoin de traduire ce code en java.
Quelqu'un peut m'aider.
C'est le code en Ruby.
DEFAULT_PRIOR = [2, 2, 2, 2, 2]
## input is a five-element array of integers
## output is a score between 1.0 and 5.0
def score votes, prior=DEFAULT_PRIOR
posterior = votes.zip(prior).map { |a, b| a + b }
sum = posterior.inject { |a, b| a + b }
posterior.
map.with_index { |v, i| (i + 1) * v }.
inject { |a, b| a + b }.
to_f / sum
end
J'ai obtenu à partir d'ici, donc peut-être quelques indices peuvent être trouvés.son sur le calcul des moyennes
Comment classer les produits en fonction de l'entrée utilisateur
C'était la solution.Dans le cas où quelqu'un en a besoin
static final int[] DEFAULT_PRIOR = {2, 2, 2, 2, 2};
static float score(int[] votes) {
return score(votes, DEFAULT_PRIOR);
}
private static float score(int[] votes, int[] prior) {
int[] posterior = new int[votes.length];
for (int i = 0; i < votes.length; i++) {
posterior[i] = votes[i] + prior[i];
}
int sum = 0;
for (int i = 0; i < posterior.length; i++) {
sum = sum + posterior[i];
}
float sumPlusOne = 0;
for (int i = 0; i < posterior.length; i++) {
sumPlusOne = sumPlusOne + (posterior[i] * (i + 1));
}
return sumPlusOne / sum;
}
La solution
Le code ne fait les choses suivantes:
Il a fixé une constante nommée DEFAULT_PRIOR
(java équivalent serait un statique de la variable finale) pour un tableau contenant le nombre 2 cinq fois.En java:
static final int[] DEFAULT_PRIOR = {2,2,2,2,2};
Il définit une à deux arguments de la méthode nommée score où le deuxième argument par défaut DEFAULT_PRIOR
.En java, ce qui peut être réalisé avec la surcharge:
float score(int[] votes) {
return score(votes, DEFAULT_PRIOR);
}
À l'intérieur de la partition de la méthode, il effectue les opérations suivantes:
posterior = votes.zip(prior).map { |a, b| a + b }
Cela crée un tableau postérieure, où chaque élément est la somme de l'élément correspondant dans la voix et l'élément correspondant en avant (c'est à dire posterior[i] = votes[i] + prior[i]
).
sum = posterior.inject { |a, b| a + b }
Ce jeux, montant à la somme de tous les éléments posterior
.
posterior.
map.with_index { |v, i| (i + 1) * v }.
inject { |a, b| a + b }.
to_f / sum
Ce bit multiplie chaque élément postérieur avec son index, plus un et puis des sommes.Le résultat est converti en float, puis divisé par sum
.
En java, vous itérer sur postérieure à for
-boucle (pas foreach) et à chaque itération ajouter (i + 1) * posterior[i]
(où i
est l'indice de la for
-boucle) à une variable tmp
, qui vous mis à 0 avant la boucle.Ensuite, vous cast tmp
pour float
et de le diviser par sum
.