Ошибка компилятора Java: отсутствует оператор возврата

1

Поэтому я получаю ошибку компилятора, что мне не хватает выражения возврата, и я рассмотрел другие подобные вопросы, но я все еще смущен по этому поводу.

public String pop()
{
  try
  {
    if(top == -1)
    {
      throw new EmptyStackException("The stack is empty!");
    }
    String x = stack[top];
    top--;
    return x;
  }
  catch (EmptyStackException e)
  {
    System.out.println("The stack is empty!");
  }
}

Я заранее извиняюсь, если этот вопрос задан раньше, но я посмотрел на другие, и я не могу понять этого.

  • 5
    Что смущает? Что возвращает ваш метод, если вы столкнулись с исключением, и ваш оператор catch его перехватил?
  • 0
    что будет если все пойдет не так и ты поймаешь блок?
Показать ещё 2 комментария
Теги:
exception-handling
compiler-errors
stack
compilation

2 ответа

2
Лучший ответ

Каково возвращаемое значение pop если исключение поймано? В этом пути выполнения нет оператора return. Вот почему компилятор жалуется.

В этом случае вызывающий EmptyStackException pop должен обрабатывать EmptyStackException. Не поймайте EmptyStackException внутри метода pop. Вам нужно будет объявить, что он throws EmptyStackException если вы определили его как исключенное исключение. Если вы его не поймаете, тогда метод всегда вернет значение или выбросит исключение, и это удовлетворит компилятор.

Обратите внимание, что можно вернуть значение после блока catch. Это также удовлетворит компилятор, но что бы вы вернули? Ноль? Затем вызывающий должен проверить значение null, но вызывающий может также поймать EmptyStackException.

  • 0
    Это имеет смысл сейчас, большое спасибо!
0

Ваша проблема связана с определением области охвата

Когда ваша функция работает, она проходит через два условия

  1. если все пойдет хорошо, что будет tr-блоком, поэтому он вернет String

Ваша проблема находится в состоянии два:

  1. если все идет не так хорошо, что будет блоком catch, который вы не возвращаете ни одного типа String, а в вашей функции ищет тип String для возврата к вызывающему, но он не может найти, поэтому вы получили ошибку

Как его решить:

Просто верните пустую строку, чтобы указать, что что-то пошло не так.

  • 0
    Это имеет смысл, спасибо за разъяснения.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню