Реализация метода, который вычисляет факториал числа, за исключением - PullRequest
0 голосов
/ 17 мая 2018
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 голосов
/ 17 мая 2018

Ваш класс FakultaetNichtDefiniertException является внутренним классом класса fakultaet1.Вы не можете создать экземпляр объекта внутреннего класса, если в области нет доступного экземпляра включающего класса.Возможное решение - сделать внутренний класс статичным.Другое решение состоит в том, чтобы определить внутренний класс как нормальный класс вне класса включения.

Java - нет включающего экземпляра типа Foo

0 голосов
/ 17 мая 2018

Вы определили класс 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.");
    } 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...