0

私はしばらくPythonとscalaの世界にいたので、返信やインタープリターがないことは、デバッグの悪夢を本当に与えてくれます. 私は次のコードを持っています:

int count = someInteger;
for (Map.Entry<String, Integer> entry : myMap.entrySet()) {
    if(!entry.getKey().equals("20") && top5 < 5) {
        String movie = entry.getKey();
        int xandy = entry.getValue();
        System.out.println(movie + "," + Float.toString(xandy / count));
        top5 += 1;
    }
}

ここでの問題は、部門からゼロを取得することです。型変数を正しく処理したと思いました。提供された回答を試しましたが、まだ機能しませんが、問題はまだゼロになっています:

これが問題を引き起こしている可能性があります:

Note: Recompile with -Xlint:unchecked for details.
4

2 に答える 2

2

これを試して:

int count = someInteger;
for (Map.Entry<String, Integer> entry : myMap.entrySet()) {
    if(!entry.getKey().equals("20") && top5 < 5) {
        String movie = entry.getKey();
        int xandy = entry.getValue();
        System.out.println(movie + "," + Float.toString((float)xandy / (float)count));
        top5 += 1;
    }
}

xandy と count の float キャストに注意してください

于 2013-09-20T19:30:33.503 に答える
1

Java で整数除算を実行すると整数になるため、除算の小数部分は切り捨てられます。

浮動小数点商を取得するには、まず変数の 1 つを afloatまたはdouble浮動小数点除算が発生するようにキャストします。

((float) xandy / count)

JLS によると、セクション 15.17.2 :

整数除算は 0 に向かって丸められます。つまり、2 進数値昇格 (§5.6.2) 後の整数であるオペランド n と d に対して生成される商は、|d · q| を満たしながら、その大きさができるだけ大きい整数値 q です。≤ |n|。また、|n| の場合、q は正です。≥ |d| n と d は同じ符号ですが、|n| の場合、q は負です。≥ |d| n と d の符号は反対です。

それらの1つをキャストするfloatだけで十分です。Java は、floatタイプを一致させるために他のオペランドを a に昇格させてから、除算を実行します。

于 2013-09-20T19:30:44.713 に答える