实现计算数字阶乘的方法,但有异常

时间:2018-05-17 13:04:32

标签: java exception

public class fakultaet1 {

    public static long fakultaet(long n)   {
        if (n<0)
            throw new FakultaetNichtDefiniertException(n);
         if (n==0)
            return 1;
          long fakultaet = 1;       
            while(n>1){
              fakultaet *= n;  // had a litte mistake here
             n--;
        }
        return fakultaet;   
    }

    public class FakultaetNichtDefiniertException extends RuntimeException{
        public FakultaetNichtDefiniertException(long n){
            super("Die Fakultät is für den Wert "+ n +" nicht definiert.");
        }
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
            System.out.println(fakultaet(5));
    }
}

所以我希望我的代码计算输入n的阶乘,并且当数字小于0时它应该抛出异常,但如果我尝试运行它会给我这个输出。

 Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
 No enclosing instance of type fakultaet1 is accessible. Must qualify the 
 allocation with an enclosing instance of type fakultaet1 (e.g. x.new A() 
 where x is an instance of fakultaet1).

at klausur_ws1718.fakultaet1.fakultaet(fakultaet1.java:8)
at klausur_ws1718.fakultaet1.main(fakultaet1.java:29)

我真的不明白错误。提前谢谢。

2 个答案:

答案 0 :(得分:5)

您将FakultaetNichtDefiniertException类定义为fakultaet1的内部类,这意味着如果您提供封闭的fakultaet1类的实例,则只能创建它的实例。这没有多大意义。

您可以将异常类移出fakultaet1,或者将其设置为嵌套类(静态),这不需要封闭的实例:

static class FakultaetNichtDefiniertException extends RuntimeException{
    public FakultaetNichtDefiniertException(long n){
        super("Die Fakultät is für den Wert "+ n +" nicht definiert.");
    } 
}

答案 1 :(得分:1)

您的FakultaetNichtDefiniertException类是类fakultaet1的内部类。如果范围中没有可用的封闭类的实例,则无法实例化内部类的对象。 一种可能的解决方案是使内部类静态。 另一个解决方案是将内部类定义为封闭类之外的普通类。

Java - No enclosing instance of type Foo is accessible