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 的浮点数

于 2013-09-20T19:30:33.503 回答
1

您在 Java 中执行整数除法,结果为整数,因此除法的任何小数部分都将被截断。

要获得浮点商,首先将其中一个变量转换为 afloat或 adouble浮点除法。

((float) xandy / count)

根据JLS,第 15.17.2 节

整数除法向 0 舍入。也就是说,在二进制数值提升(第 5.6.2 节)之后为整数的操作数 n 和 d 产生的商是一个整数值 q,其幅值尽可能大,同时满足 |d · q|。≤ |n|。此外,当 |n| 时 q 为正 ≥ |d| 并且 n 和 d 具有相同的符号,但是当 |n| 时 q 为负 ≥ |d| n 和 d 符号相反。

铸造其中之一float就足够了。Java 会将另一个操作数提升为 afloat以匹配类型,然后执行除法。

于 2013-09-20T19:30:44.713 回答