双师表现错误

我有一个名为List wordFreqMapHashMap List wordFreqMapsize234

 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 getTFMap (Map wordFreqMap) { Map tfMap = new HashMap(); int noOfTerms = wordFreqMap.size(); Double tf; for (Entry 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, ...}

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

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

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

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

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

Integer/Integer是一个Integer ,它被转换为Double因此,它仍然是一个扩展为DoubleInteger

将其更改为

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

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

 int/int -> int 

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

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

例如

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

要么

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