我正在尝试使用队列实现堆栈并且由于某种原因即时获取。
当我尝试推送一些整数时,我正在运行时获取exeption 希望有人能告诉我为什么isempty现在正在使用这个主要: 这是我的实施:import java.util.concurrent.ArrayBlockingQueue;
public class StackWithQueue {
ArrayBlockingQueue <Integer> queue1;
ArrayBlockingQueue <Integer> queue2;
int size;
// class constructor
public StackWithQueue(int size){
this.size = size;
this.queue1 = new ArrayBlockingQueue<Integer>(size);
this.queue1 = new ArrayBlockingQueue<Integer>(size);
}
// push element into the stack
public void push(int val){
if(this.isEmpty()){
queue1.offer(val);
}else{
if(queue1.size()>0){
queue2.offer(val);
int size = queue1.size();
while(size>0){
queue2.offer(queue1.poll());
size--;
}
}else if(queue2.size()>0){
queue1.offer(val);
int size = queue2.size();
while(size>0){
queue1.offer(queue2.poll());
size--;
}
}
}
}
public int pop(){
int val = 0;
if(queue1.size()>0){
val = queue1.poll();
}else if(queue2.size()>0){
val = queue2.poll();
}
return val;
}
public boolean isEmpty(){
return this.queue1.isEmpty() & this.queue2.isEmpty();
}
public static void main(String[] args) {
int size = 5;
StackWithQueue sq = new StackWithQueue(5);
for (int i = 0; i <=size ; i++) {
sq.push(i);
}
while(!sq.isEmpty()){
System.out.println(sq.pop()+",");
}
}
}
答案 0 :(得分:1)
您有拼写错误:
this.queue1 = new ArrayBlockingQueue<Integer>(size);
this.queue1 = new ArrayBlockingQueue<Integer>(size);
将其替换为:
this.queue1 = new ArrayBlockingQueue<Integer>(size);
this.queue2 = new ArrayBlockingQueue<Integer>(size);