2

Ruby を使用したことはありませんが、このコードを Java に変換する必要があります。

誰でも私を助けることができますか?

これは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

ここから入手したので、そこに何か手がかりがあるかもしれません。平均の計算について

ユーザー入力に基づいて製品をランク付けする方法

これが解決策でした。万が一、必要な方がいらっしゃいましたら

    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;
}
4

1 に答える 1

3

このコードは次のことを行います。

という名前の定数DEFAULT_PRIOR(java に相当するものは static final 変数になります) を、数値 2 を含む配列に 5 回設定します。Java では:

static final int[] DEFAULT_PRIOR = {2,2,2,2,2};

これは、score という名前の 2 つの引数のメソッドを定義します。ここで、2 番目の引数のデフォルトはDEFAULT_PRIORです。Java では、これはオーバーロードで実現できます。

float score(int[] votes) {
    return score(votes, DEFAULT_PRIOR);
}

score メソッド内で、次の処理を行います。

posterior = votes.zip(prior).map { |a, b| a + b }

これにより、配列posteriorが作成されます。各要素は、投票の対応する要素と事前の対応する要素の合計です(つまり、posterior[i] = votes[i] + prior[i])。

sum = posterior.inject { |a, b| a + b }

これは、 sum を のすべての要素の合計に設定しますposterior

posterior.
map.with_index { |v, i| (i + 1) * v }.
inject { |a, b| a + b }.
to_f / sum

このビットは、後方の各要素にそのインデックスに 1 を加えたものを乗算し、それを合計します。結果は float に変換され、 で除算されsumます。

forJavaでは、(foreach ではなく) -loopを使用して事後処理を反復し、各反復(i + 1) * posterior[i]で (iは -loop のインデックスfor) を variabletmpに追加し、ループの前に 0 に設定します。次に、にキャストtmpしてfloatで割りsumます。

于 2010-10-23T12:42:22.750 に答える