我导入java.math。*;但java仍然无法找到符号sqrt(double)......?

时间:2014-07-21 21:32:34

标签: java recursion prime-factoring

import java.lang.*;
import java.math.*;

class Factor
{
    public void Factor(double NumToFactor)
    {
        for (double i=0; i <= Math.sqrt(NumToFactor); i++)
        {
            if (NumToFactor%i == 0)
            {
                Factor(NumToFactor/i);
                System.out.println(i + "*");
            }
        }
    }

}

public class PrimeFactorization 
{

    public static void main(String[] args) 
    {
        System.out.println(Factor(120.0)); 
    }
}

我收到以下错误(我很困惑):

错误:找不到符号         for(double i = 0; i&lt; = Math.sqrt(NumToFactor); i ++)

2 个答案:

答案 0 :(得分:4)

永远不必导入java.lang类。 java.math不包含Math; java.lang确实如此。

您的编译错误并未表示您遗漏Math。相反,您在此代码中还有许多其他问题,首先是您在上有一个void返回类型的事实,您可能会尝试将其声明为构造函数但不是(已编辑)。构造函数没有返回类型。

答案 1 :(得分:0)

此代码存在许多问题。首先,即使修复了代码,它也会进入infinte循环。递归逻辑不正确。这是我做的快速修复,因此您可以调用此方法。但是,来自Factor类的Factor()方法需要用逻辑来检查以打破无限循环,即。调用Factor()的{​​{1}}方法,它没有结束。

看问题不是Math.sqrt(),不是因为构造函数。逻辑和方法都没有返回类型。

Factor()