双师表现错误

时间:2014-09-09 15:39:48

标签: java double

我有HashMap名为List<String, Intger> wordFreqMap,其size234

wordFreqMap = {radiology=1, shift=2, mummy=1, empirical=1, awful=1, geoff=1, .......}

我想计算每个单词的term frequency

term frequency = frequency of term / total number of terms

public static Map<String, Double> getTFMap (Map<String, Integer> wordFreqMap)
    {
        Map<String, Double> tfMap = new HashMap<String, Double>();
        int noOfTerms = wordFreqMap.size();
        Double tf;

        for (Entry<String, Integer> word : wordFreqMap.entrySet() ) 
        {
                tf = (double) ( word.getValue() / noOfTerms );
                tfMap.put(word.getKey(), tf );
        }
        return tfMap;
    }

我的问题是,tfMap正在返回{radiology=0.0, shift=0.0, mummy=0.0, empirical=0.0, awful=0.0, geoff=0.0, .....}

我不明白为什么每个学期都会返回0.0。我该如何解决?

我应该得到类似{radiology=0.00427, shift=0.00854, ...}

的内容

4 个答案:

答案 0 :(得分:9)

您正在执行整数除法,然后键入强制转换:

tf = (double) ( word.getValue() / noOfTerms );
                ^-----integer division----^

键入部门中的一个元素以转换为浮点除法:

tf = ((double)word.getValue()) / noOfTerms;

答案 1 :(得分:2)

您正在进行整数除法,然后将该答案转换为double。你需要做的是先将两个值之一转换为double,然后对它进行除法。那应该能得到你想要的答案。

答案 2 :(得分:1)

Integer/Integer是一个Integer,已投放到Double,因此它仍然是Integer扩展为Double

将其更改为

 tf =  ( (double)word.getValue() / noOfTerms );

答案 3 :(得分:1)

你正在做的是将整数除以另一个整数,然后尝试将其转换为double。 int / int是一个int,虽然你把它强制转换为double,你不会得到带小数点的实际值。

int/int -> int

你应该做的是将word.getValue()或noOfterms转换为double 然后

int/double -> double
double/int -> double
double/double -> double

e.g。

  tf =  (double)word.getValue()/noOfTerms;

tf =  word.getValue()/(double)noOfTerms;