#java #queue #stack
Вопрос:
private MyStack stack1 = new MyStack();
private MyStack stack2 = new MyStack();
public int dequeue() {
int x = 0;
while(!stack1.isEmpty()) {
stack2.push(stack1.pop());
}
return x;
}
Программа предназначена для перемещения элементов из стека 1 в стек 2. Проблема в том, что он создает исключение StackEmptyException, когда я перемещаюсь из стека 1 в 2. Я попытался протолкнуть обычные целые числа в обе стопки, и это показалось мне нормальным.
public class MyStack {
static final int MAX = 100;
private int[] array = new int[MAX];
private int top;
public MyStack(){
top = -1;
}
boolean isEmpty() {
return (top < 0);
}
public void setArraySize(int x) {
array = new int[x];
}
public int peek(){ // displays the number on top of stack
return array[top];
}
public void push(int x) { // puts a number on top of stack
if(top>=array.length-1) {
System.out.println("StackFullException");
}
array[ top] = x;
}
public int pop() { // removes the number that is on top of stack
if(top<array.length) {
System.out.println("StackEmptyException");
}
int x = array[top--];
return x;
}
}
Это мое объявление стека, основанное на массиве.
Комментарии:
1. Можете ли вы опубликовать объявление stack1 и stack2? Если это ваши собственные реализации, может потребоваться и их код.
2. Это мой первый раз, когда я спрашиваю в стеке, я сразу же
3. Я попробовал этот код с переменными, определенными как
Deque<Integer> stack1 = new LinkedList<>();
иstack2
определенными аналогично, используя типы изjava.util.*
и вводя несколько значенийstack1
перед вызовом, и он работал просто отлично.4. ДА. условие в
pop
неправильном. Он всегда считает, что стек пуст. Замените его,if (isEmpty())
и все должно быть хорошо. @user16320675 если вы опубликуете это в качестве ответа, я буду рад его озвучить.5. Я только сейчас это заметил и не могу поверить, что мне потребовалось пару дней, чтобы это увидеть. Спасибо, чувак!
Ответ №1:
public int pop() { // removes the number that is on top of stack
if(top<0) {
System.out.println("StackEmptyException");
}
int x = array[top--];
return x;
}
Я по ошибке установил свой оператор if, чтобы выбросить StackEmptyExeception, если сверху