Я реализовал двухстороннюю очередь, используя массив под названием ArrayDeque. Затем я использовал этот ArrayDeque для реализации стека myStack. В классе стека я пишу метод, который может удалить верхние n элементов из стека за постоянное время, называемый remove (int n). Ниже приведены соответствующие фрагменты кода:
public Object removeFirst() throws EmptyDequeException{
if(isEmpty())
throw new EmptyDequeException("Cant remove from empty queue");
Object ans= data[f];
data[f]= (Object)null;
f= (f+1)%data.length;
sz--;
return ans;
}
Выше находится функция removeFirst () ArrayDeque, которая возвращает первый элемент двухсторонней очереди и генерирует исключение, когда двухсторонняя очередь пуста.
public void remove(int n) throws EmptyStackException {
while (n > 0) {
try{
myStack.removeFirst();
n--;
remove(n) ;
}
catch(EmptyDequeException e){
throw new EmptyStackException();
}
}
}
Это метод remove (n) класса Stack. Здесь я получаю сообщение об ошибке: Исключение в потоке «main» java.util.EmptyStackException в Stack.remove (Stack.java:48): где номер строки 48 — это выражение catch. Я думаю, что что-то не так с порядком моего блока try-catch и / или обработки исключений. Но я не могу понять, что это такое. Пожалуйста, направьте меня!