2

我试图弄清楚这一点:

double chiSquare = ((double)(hashtable.get(key).intValue()/noWords))/* * Math.log10((NO_DOCUMENTS/all.get(key)))*/;
if (key.equals("love")){
    System.out.println(hashtable.get(key));
    System.out.println(all.get(key));                
    System.out.println(noWords);    
    System.out.println(chiSquare);
    System.out.println((double)1/841);
    System.exit(0);
}

为什么打印 chiSquare,打印零,而打印 1/841 给出双精度值?哈希表是<String, Integer>

4

2 回答 2

4

正如@GregS 在他的评论中指出的那样,一个 int 除以一个 int 是一个 int。将其中一个数字转换为双精度数将产生您想要的输出。

double chiSquare = ((double)hashtable.get(key).intValue())/noWords;

或者,使用 Integer 上的便捷方法将其转换为双精度:

double chiSquare = hashtable.get(key).doubleValue()/noWords;
于 2011-03-10T01:22:29.060 回答
1

因为括号不正确。

double chiSquare = ( (double) hashtable.get(key).intValue() )/noWords;
于 2011-03-10T01:19:06.843 回答