使用2队列的Java堆栈

时间:2015-10-14 12:19:04

标签: java recursion tree stack queue

我正在尝试使用队列实现堆栈并且由于某种原因即时获取。

当我尝试推送一些整数时,我正在运行时获取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()+",");
        }
    }
}

1 个答案:

答案 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);