2017-02-11 3 views
-2

私は2つのスタックを持っています。 私は1つの要素にプッシュすることができるようにしたいが、それは他の要素がポップされた場合に限られる。代わりに私の現在の機能のJavaでは、Stack.pop()をパラメータとしてどのように適用しますか?

は次のようになります。

public void pushValue(int poppedValue) { 
    Stack.push(value) 
} 

私も、関数は次のようになりたい:

私は代わりに、パラメータとして pop()機能を設定することができますどのように
public void pushValue(pop() poppedValue) { 
    Stack.push(value) 
} 

intの? つまり、どこかからポップされた値だけを受け入れるようにパラメータを設定するにはどうすればよいですか?

+0

最初のスタックを渡すだけで、値をポップしてスタック2にプッシュすることができます。 – Tom

+0

あなたはメソッド自体にスタックを渡して値をポップさせることができますが(それはいくつかの設計上の問題を引き起こすかもしれませんが)、 'int'が特定の" history "を持つことを保証する方法はありません。 – MikaelF

+0

あなたは1つのスタックから値をポップし、それを別のスタックに置く単一の操作をしたいと思っていますか?または、過去のある時点で別のスタックから取り出された値だけを受け入れるスタックが必要なのでしょうか? –

答えて

1

あなたの構文は不可能ですが、あなたは第二のスタックにメンバーフィールドを作ることができ、その後push場合に限っ値が存在するとき(フィールド経由)は、第2のスタックでpeek。その後

private Stack otherStack = null; // <-- set this somehow (constructor?), or pass it. 

public void pushValue(int newValue) { 
    if (otherStack != null && otherStack.peek() == newValue) { 
    Stack.push(newValue); // <-- please observe naming conventions (stack) 
    } 
} 

pop()値。基本的にpeek,pushおよび,popとなる。

+0

わかりません。値がすでに "otherStack"からポップされていた場合でも、そのスタックに値が残っていないので、あなたがそれを見るときには見えません。 –

+0

@DaveCosta正解、私の最後の文章を読んでください。操作の順番は 'peek'、' push'、 'pop'はOPが望むことをする...と思う。 –

+1

しかし、このメソッドは、ポップされた値をパラメータとして受け取ります。あなたはまだ値をポップしていない場合はどのようにそれを呼び出すでしょうか? –

1

この制約を表現する方法はJavaではありません。 (またはその他の言語で、AFAIK)

(IMO)あなたができることは、最初のものに引数として第2のStackを渡して、値をポップする責任を負うことです。例えば

public class Stack { 
    ... 
    public int transferValue(Stack source) { 
     int res = source.pop(); 
     this.push(value); 
     return res; 
    } 
} 
関連する問題