Выброс EmptyTreeException не работает

В настоящее время я работаю над проектом, в котором мне нужно создать двоичное дерево поиска, и у меня возникла небольшая проблема с реализацией моего метода getRootData.

Я уже пытался импортировать разные вещи или пытался найти реализованный метод, но мне не повезло.

public T getRootData() {
    if (isEmpty())
        throw new EmptyTreeException();
    else
        return root.getData();
}

Я должен написать класс для EmptyTreeExcpetion или мне нужно сделать что-то еще.

Мне не ясно, в чем проблема/вопрос.

lealceldeiro 20.04.2019 21:44

@lealceldeiro моя IDE постоянно говорит мне «не может разрешить символ 'EmptyTreeException'»

Paul Anthony Morillo 20.04.2019 21:51

@PaulAnthonyMorillo ты написал EmptyTreeException класс?

Zain Arshad 20.04.2019 21:59

@ZainArshad нет, мне было интересно, это то, что я должен делать

Paul Anthony Morillo 20.04.2019 22:02
getRootData() это не класс, это метод. Следовательно, это часть класса. И поскольку он возвращает T, я предполагаю, что класс, частью которого он является, является универсальным классом. Если вы используете только стандартные классы JDK вместе с классами, которые вы написали, то в JDK нет класса EmptyTreeException, а значит, вы должны его написать. Вы знаете, как это сделать?
Abra 20.04.2019 22:03

@Abra нет, я не уверен, как написать EmptyTreeException, я не был уверен, похоже ли это на другие исключения, которые по умолчанию используются в jdk. У меня есть учебник, который только что использовал EmptyTreeException, но у них не было его реализации.

Paul Anthony Morillo 20.04.2019 22:08

@PaulAnthonyMorillo, вы можете проверить мой ответ, поможет он или нет?

Zain Arshad 20.04.2019 22:19
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
7
241
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Итак, сначала вам нужно написать класс EmptyTreeException, так как для этого нет встроенного класса.

public class EmptyTreeException extends RuntimeException
{   
    public EmptyListException()
    {
        super ("Tree is Empty");
    }
}

Теперь вам нужно изменить свой getRootData() следующим образом:

public T getRootData() throws EmptyTreeException
{
    if (isEmpty())
        throw new EmptyTreeException();
    else
        return root.getData();
}

Редактировать: Вам не нужно менять свой getRootData(), как упоминалось другими пользователями SO, что EunTimeException является «непроверенным исключением», поэтому нет необходимости делать это throws EmptyTreeException после заголовка метода.

Теперь вы должны изменить свой getRootData() вот так Нет, нет, потому что ваша реализация делает EmptyTreeExceptionнепроверенное исключение, что кажется логичным, поскольку в коде OP метод getRootData() не объявляет, что он выдает EmptyTreeException.
Abra 20.04.2019 22:12

@ Абра, ты прав ... я просто делал то, что делал годами ... ха-ха-ха, теперь я понял :)

Zain Arshad 20.04.2019 22:14
не будет ли это выдавать ошибку? Есть один способ узнать ;-)
Abra 20.04.2019 22:17

@lealceldeiro, не могли бы вы просветить меня насчет того, что это «плохая идея»..? любая помощь приветствуется

Zain Arshad 20.04.2019 22:25

Интересно, @lealceldeiro, многие люди, которых я встречал, склонны думать, что исключений проверил следует избегать любой ценой. Несмотря на это, вы должны расширить исключение, которое имеет смысл. В этом случае я не вижу смысла делать EmptyTreeException проверенным исключением — оно похоже на NoSuchElementException, которое не проверяется. Другими словами, если дерево пусто, это, вероятно, ошибка программирования, а не исправимая ошибка, вызванное чем-то, что находится вне контроля разработчиков.

Slaw 20.04.2019 22:33

Я согласен с @Slaw и лично стараюсь использовать непроверенные исключения вместо проверенных, но я полагаюсь на книгу Джоша Блоха Эффективная Java, третье издание, а именно на пункт 70: Используйте проверенные исключения для восстанавливаемых условий и исключения времени выполнения для ошибок программирования..

Abra 20.04.2019 22:36

Привет @PaulAnthonyMorillo,

Ни в одном JDK нет исключения класса EmptyTreeException. Затем нам нужно создать класс, который расширяет Exception или RuntimeException, чтобы генерировать его.

Мы можем проверить, есть ли класс по поиску java в javadoc. Нравится javadoc на jdk11

Надеюсь, я помог,

В jdk 11 нет исключения класса EmptyTreeException. Пожалуйста, просветите меня, потому что я не видел упоминания об использовании версии JDK в исходном вопросе. В любом случае, никогда был EmptyTreeException в любой версии JDK.
Abra 20.04.2019 22:20

Привет @Abra, я проверяю Exception только на jdk11. Я думаю, этого было бы достаточно. Но я не знал и не проверял в других jdks. Я исправлю ответ. Спасибо за отзыв :)

Marcos Côrtes 20.04.2019 22:57

Другие вопросы по теме