2017-12-03 16 views
0

私のクラスのプロジェクトを作成していて、目的はスタックを使用してキューを作成することです。私はクラスのための一般的なフレームワークを持っていると思う:プロジェクトのpop()メソッドでエラーが発生しました

import java.util.LinkedList; 
import java.util.Stack; 

public class SQueue { 
private Stack<Integer> queue; 

public SQueue(Stack<Integer> inputQueue) { 
    queue = inputQueue; 
} 
public void push(int x) { 
    Stack<Integer> tempStack = new Stack<Integer>(); 
    Stack<Integer> backwardsStack = new Stack<Integer>(); 
    tempStack.push(x); 
    while(!queue.isEmpty()) { 
    backwardsStack.push(queue.pop()); 
    } 
    while(!backwardsStack.isEmpty()) { 
     tempStack.push(backwardsStack.pop()); 
    } 
    queue = tempStack; 
} 
public int pop() { 
    Stack<Integer> tempStack = new Stack<Integer>(); 
    while(!queue.isEmpty()) { 
    tempStack.push(queue.pop()); 
    } 
    int temp = tempStack.peek(); 
    tempStack.pop(); 
    return temp; 
} 
public int peek() { 
    Stack<Integer> tempStack = new Stack<Integer>(); 
    while(!queue.isEmpty()) { 
    tempStack.push(queue.pop()); 
    } 
    int temp = tempStack.peek(); 
    return temp;   
} 
public boolean isEmpty() { 
    return queue.isEmpty(); 
} 
} 

もテストのための次のクラス使用してイム:

Exception in thread "main" java.util.EmptyStackException 
at java.util.Stack.peek(Stack.java:102) 
at SQueue.pop(SQueue.java:27) 
at SQueueTest.case1(SQueueTest.java:19) 
at SQueueTest.main(SQueueTest.java:10) 

:私はこのエラーを受信したプログラムを実行した後

import java.util.Stack; 

public class SQueueTest { 

public static void main(String[] args) { 
    Stack<Integer> s = new Stack<Integer>(); 
    SQueue test1 = new SQueue(s); 
    SQueue test2 = new SQueue(s); 
    SQueue test3 = new SQueue(s); 
    case1(test1); 
    case2(test2); 
    case3(test3); 
} 
public static void case1(SQueue test) { 
    for(int i =1; i <6; i++) { 
     test.push(i); 
    } 
    for(int i =0; i <3; i++) { 
     test.pop(); 
    } 
    System.out.println(test.peek()); 
} 
public static void case2(SQueue test) { 
    test.push(2); 
    test.push(4); 
    test.push(8); 
    for(int i =0; i <2; i++) { 
     test.pop(); 
    } 
    System.out.println(test.isEmpty()); 
} 
public static void case3(SQueue test) { 
    for(int i = 1; i<4; i++) { 
     test.push(i*3); 
    } 
    test.pop(); 
    System.out.println(test.peek()); 
    System.out.println(test.isEmpty()); 
} 
} 

をポップ()メソッドのtemp変数をバグテストしていたときに、正しいint、5を格納していたが、その桁を削除したので、このエラーを解決する方法をわからない。

答えて

1

(もpeek()で)あなたのpop()方法では、あなたが正常にSQUEUEから最初の要素を削除しているが、あなたはあなたのqueueスタックに戻ってtempStackからすべての要素をプッシュすることはありませんように見えます。したがって、次の要素をポップアウトしようとすると、空のqueueを処理しています。

関連する問題