Могут ли методы с обработчиками исключений не иметь операторов возврата?!?
-Ниже отредактированный код.
public int pop() throws NullPointerException {
try{
if (a.isEmpty()){
throw new NullPointerException();
}
int x = (int)a.remove(a.size() - 1);
if (x == (int)min.get(min.size() - 1)) {
min.remove(min.size() - 1);
}
return x;
}catch(NullPointerException n) {
System.out.println("There are no elements to pop.");
}
return -1;
}
Если вы поймаете EmptyStackException, ваш оператор return не будет достигнут. Вам нужно указать, что метод вернет в этой ситуации.
throw new NullPointerException() Не делайте этого.
Подумайте о том, что должен возвращать метод в случае возникновения исключения. Тогда верни это.
Тай. Я публикую новый фрагмент кода на случай, если кому-то понадобится наглядный пример в будущем. Работает как надо.




Если оператор throw new <exception> всегда является последним оператором на пути выполнения через тело метода или если тип возвращаемого значения метода — void.
В вашем коде вы могли бы просто не обрабатывать EmptyStackException. Проблема возникает из-за введения catch, в конце которого нет ни return, ни throw утверждения.
public int pop() {
if (a.isEmpty()){
throw new NullPointerException();
}
int x = (int) a.remove(a.size() - 1);
if (x == (int) min.get(min.size() - 1)) {
min.remove(min.size() - 1);
}
return x;
}
Пожалуйста, уточните свой вопрос, точно определив, о каком методе вы спрашиваете.