В настоящее время я работаю над проектом, в котором мне нужно создать двоичное дерево поиска, и у меня возникла небольшая проблема с реализацией моего метода getRootData.
Я уже пытался импортировать разные вещи или пытался найти реализованный метод, но мне не повезло.
public T getRootData() {
if (isEmpty())
throw new EmptyTreeException();
else
return root.getData();
}
Я должен написать класс для EmptyTreeExcpetion или мне нужно сделать что-то еще.
@lealceldeiro моя IDE постоянно говорит мне «не может разрешить символ 'EmptyTreeException'»
@PaulAnthonyMorillo ты написал EmptyTreeException класс?
@ZainArshad нет, мне было интересно, это то, что я должен делать
getRootData() это не класс, это метод. Следовательно, это часть класса. И поскольку он возвращает T, я предполагаю, что класс, частью которого он является, является универсальным классом. Если вы используете только стандартные классы JDK вместе с классами, которые вы написали, то в JDK нет класса EmptyTreeException, а значит, вы должны его написать. Вы знаете, как это сделать?
@Abra нет, я не уверен, как написать EmptyTreeException, я не был уверен, похоже ли это на другие исключения, которые по умолчанию используются в jdk. У меня есть учебник, который только что использовал EmptyTreeException, но у них не было его реализации.
@PaulAnthonyMorillo, вы можете проверить мой ответ, поможет он или нет?




Итак, сначала вам нужно написать класс 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.
@ Абра, ты прав ... я просто делал то, что делал годами ... ха-ха-ха, теперь я понял :)
@lealceldeiro, не могли бы вы просветить меня насчет того, что это «плохая идея»..? любая помощь приветствуется
Интересно, @lealceldeiro, многие люди, которых я встречал, склонны думать, что исключений проверил следует избегать любой ценой. Несмотря на это, вы должны расширить исключение, которое имеет смысл. В этом случае я не вижу смысла делать EmptyTreeException проверенным исключением — оно похоже на NoSuchElementException, которое не проверяется. Другими словами, если дерево пусто, это, вероятно, ошибка программирования, а не исправимая ошибка, вызванное чем-то, что находится вне контроля разработчиков.
Я согласен с @Slaw и лично стараюсь использовать непроверенные исключения вместо проверенных, но я полагаюсь на книгу Джоша Блоха Эффективная Java, третье издание, а именно на пункт 70: Используйте проверенные исключения для восстанавливаемых условий и исключения времени выполнения для ошибок программирования..
Привет @PaulAnthonyMorillo,
Ни в одном JDK нет исключения класса EmptyTreeException. Затем нам нужно создать класс, который расширяет Exception или RuntimeException, чтобы генерировать его.
Мы можем проверить, есть ли класс по поиску java в javadoc. Нравится javadoc на jdk11
Надеюсь, я помог,
EmptyTreeException в любой версии JDK.
Привет @Abra, я проверяю Exception только на jdk11. Я думаю, этого было бы достаточно. Но я не знал и не проверял в других jdks. Я исправлю ответ. Спасибо за отзыв :)
Мне не ясно, в чем проблема/вопрос.