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;
}
Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top