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)
我真的不明白错误。提前谢谢。
答案 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的内部类。如果范围中没有可用的封闭类的实例,则无法实例化内部类的对象。 一种可能的解决方案是使内部类静态。 另一个解决方案是将内部类定义为封闭类之外的普通类。