“线程中的异常”;“主要”;java.lang.NumberFormatException:无限或NaN

“线程中的异常”;“主要”;java.lang.NumberFormatException:无限或NaN,java,cosine-similarity,Java,Cosine Similarity,你能帮我解决这个问题吗伙计们。。我正在尝试获取一个大十进制(BigDecimal)的日志,但我收到以下异常错误消息: Exception in thread "main" java.lang.NumberFormatException: Infinite or NaN 这就是我所拥有的: BigDecimal num = new BigDecimal(totalDocuments/hitDocuments); BigDecimal idf = new BigDecimal(Math.log(n

你能帮我解决这个问题吗伙计们。。我正在尝试获取一个大十进制(BigDecimal)的日志,但我收到以下异常错误消息:

Exception in thread "main" java.lang.NumberFormatException: Infinite or NaN
这就是我所拥有的:

BigDecimal num = new BigDecimal(totalDocuments/hitDocuments);
BigDecimal idf = new BigDecimal(Math.log(num.doubleValue()));
BigDecimal termF = new BigDecimal(terms.get(j).getTermFreq());
BigDecimal tfIdf = new BigDecimal(termF.doubleValue() * idf.doubleValue());
terms.get(j).setTfIdf(tfIdf.doubleValue());
我在第二行得到了异常;我该怎么做?非常感谢你的好意。哦,顺便说一下,我正在计算文本文件的“tf-idf”

这是完整的代码

File[]语料库=新文件(“files/”).listFiles()
inttotaldocuments=(corpus.length)-1//-1用于可疑文件。

    int hitDocuments = 1;
    for (int i = 0; i < corpus.length; i++) {
        ArrayList<String> corpusWords = getWords(corpus[i].getAbsolutePath());
        for (int j = 0; j < terms.size(); j++) {
            for (int k = 0; k < corpusWords.size(); k++) {
                if (terms.get(j).getTerm().equals(corpusWords.get(k))) {
                    hitDocuments++;
                }
            }
            //Update the tf-idf
            BigDecimal num = new BigDecimal(totalDocuments/hitDocuments);
            BigDecimal idf = new BigDecimal(Math.log(num.doubleValue()));
            BigDecimal termF = new BigDecimal(terms.get(j).getTermFreq());
            BigDecimal tfIdf = new BigDecimal(termF.doubleValue() * idf.doubleValue());
            terms.get(j).setTfIdf(tfIdf.doubleValue());
        }
    }
int-hitDocuments=1;
for(int i=0;i

`

如果
num
0
,则将返回
Infinite

如果参数为正或负,则结果为负无穷


看起来hitDocuments或totalDocuments(或两者)是双精度的,而hitDocuments是0.0。anything/0.0=Double.Infinity(如果totalDocuments为0.0,则为NaN)。这两个变量都不能记录日志。

您好,谢谢您的快速响应,但是num不能为零,因为变量
totalDocuments
的长度为
corpusFiles.listFiles.length
。默认情况下,变量
hitDocuments
的值为1。谢谢你,阿加尼,我从你的回复中得到了一个想法。。我已重新初始化变量
hitDocuments=1。。谢谢这对我来说是迄今为止最好的答案。谢谢