java 调用其他类方法时找不到符号

hivapdat  于 2023-02-14  发布在  Java
关注(0)|答案(2)|浏览(172)

我正在编写一个程序,使用Ramanujan级数来估计pi。在这个系列中,它需要我计算几个表达式的阶乘,我为此编写了一个类。我在之前的作业中使用了这个类,解释了类顶部的测试。当我试图创建阶乘对象来使用Factorial.calculate(nthNum)时,我的问题开始发挥作用。我已经尝试了我能想到的一切,搜索了许多论坛,回顾了我的笔记,我不明白为什么这个错误不断发生。

.\Ramanujan.java:9: error: cannot find symbol
        Factorial f = new Factorial();
        ^
  symbol:   class Factorial
  location: class Ramanujan
.\Ramanujan.java:9: error: cannot find symbol
        Factorial f = new Factorial();
                          ^
  symbol:   class Factorial
  location: class Ramanujan
2 errors
error: compilation failed

如果有人能向我解释为什么找不到这个符号,那将是非常有帮助的。谢谢。

public class Ramanujan {
    public static void main (String[] args){
        String nthRamNumString = args[0];
        int nthRamNum = Integer.parseInt(nthRamNumString);
        findRamNum(nthRamNum);
    }

    public static double findRamNum(int nthNum){
        Factorial f = new Factorial();
        double factNum = f.calculate(nthNum);
        double firstVal = ((2 * Math.sqrt(2)) / 9801);
        double piNum = 0;
        for (int i = 0; i <= nthNum; i++){
            piNum = piNum + (4 * factNum) * (1103 + (26390 * nthNum)) / 
            (Math.pow(factNum, 4) * (Math.pow(396, 4 * nthNum)));
        }
        double finalPiVal = (firstVal * piNum);
        return 1 / finalPiVal;
    }
}

public class Factorial {
    public static void main (String[] args){
        String value = args[0];
        Long n = Long.parseLong(value);
        if (n > 20){
            System.out.println("Value must be less than 20!");
            System.exit(0);
        }
        else if (n < 0){
            System.out.println("Value must be greater than 1!");
            System.exit(0);
        }
        else{
            System.out.println(calculate(n));
        }
        Long result = calculate(0);
        if (result == 1){
            System.out.println("Factorio.calculate(0) returned " + result + ". Test passed!");
        }
        else{
            System.out.println("Factorio.calculate(0) returned " + result + ". Test failed!");
        }
        result = calculate(5);
        if (result == 120){
            System.out.print("Factorio.calculate(5) returned " + result + ". Test passed!");
        }
        else{
            System.out.print("Factorio.calculate(5) returned " + result + ". Test failed!");
        }
    }

    public static long calculate(long n){
        long factNum = 0;
        if (n == 0){
            return 1;
        }
        else{
            for (int i = 0; i <= n; i++){
                factNum = factNum + (n * (n - 1));
            }
        }
        return factNum;
    }
}
n3h0vuf2

n3h0vuf21#

错误消息指出编译器在Ramanujan类中找不到符号“阶乘”。这可能是因为您没有在Ramanujan类中导入阶乘类,或者阶乘类在不同的包中。
要解决此问题,请确保您已使用文件开头的“import”语句将Factorial类导入Ramanujan类中:
(导入包.名称.阶乘;//替换为实际的包和类名)
或者,您可以在创建Factorial对象时指定完整的包和类名:
包名阶乘f =新包名阶乘();//替换为实际的包和类名
另外,请注意,您的Factorial类有一个main方法,对于要用作实用程序类的类来说,该方法不是必需的。您可能希望从Factorial类中删除main方法。

au9on6nz

au9on6nz2#

我忘记编译代码了:(。谢谢大家的帮助。

相关问题