2016-09-18 6 views
-1

特定の値をすべて取り出して元のスタックに戻すスタックのRemoveAllメソッドを作成する必要があります。しかし、私が書いた方法は、偽を返すだけです。私のコードのエラーは何ですか?なぜ私のbool RemoveAllメソッドはfalseを返しますか?

ここに私が書いた方法です:

static void Main() 
{ 
    OurStack<int> nums = new OurStack<int>(); 
    nums.Push(1); 
    nums.Push(31); 
    nums.Push(22); 
    nums.Push(3); 
    //nums.RemoveAll(31); 

    Console.Write(nums.RemoveAll(1)); 
    Console.ReadKey(); 
+0

OurListNodeとは何ですか? pTmp = mTop; '、2つの' while'ループの中断条件は何ですか?データイオンスタックを押すだけでスタックを空にしているようです。 –

+0

2つのwhileループのブレーク条件は、スタックのスタックをWeStackとtempStackにする必要があります。しかし、MajkeloDev氏が指摘しているように、この方法ではデータが全く入れられていないことを認識していません。私は、スタックの先頭への一時的なポインタとしてpTmpを使用しています。だから、私はpTmp = pTmp.Nextを書いたときに、フレームからポップアップしてその内容を分析し、それをスタックから完全に削除するか、tempStackに配置しようとしていますが、実際にはwhileループの行を過ぎてはいけません。 – Stephanie

答えて

2

問題はその次のとおりです。

(OurStack.Count> 0)

は常に(tempStack.Count> 0)

ます関数が起動したときにfalseになります。新しいobでOurStackとtempStackを初期化します。

Stack<T> OurStack = new Stack<T>(); 
Stack<T> tempStack = new Stack<T>(); 

ので、それらのリストは常に空になります...

+0

メソッドが使用されると、スタックに追加した後に呼び出すので、最初の文はtempStackにデータをプッシュしませんか?ではなぜリストはまだ空ですか?私がデバッグすると、リストに追加するプロセスが最初に行われます。そのため、OurStackにはデータが含まれています。しかし、最初のwhileステートメントに移動してから2番目のステートメントに移動し、falseであるItemRemoveの元の値を返すので、空であることがわかります。どんな考え? – Stephanie

+0

@Stephanieあなたは私の答えを正しいものとしてマークしました。あなたは今それを理解していますか、私はあなたにもう少し説明をして欲しいですか? – MajkeloDev

+0

あなたが正しいと思うプログラムをデバッグするときに私は気づくことができました - 私はちょうどそれを修正する方法を知らないので - もう少し説明する時間があれば、私はそれを感謝します! – Stephanie

0

たぶんライン - (pTmp.Data.Equals(アイテム))の場合は、次のとおりです。

public bool RemoveAll(T item) 
{ 
    Stack<T> OurStack = new Stack<T>(); 
    Stack<T> tempStack = new Stack<T>(); 
    bool itemRemove = false; 
    OurListNode<T> pTmp = mTop; 

    while (OurStack.Count > 0) 
    { 
     if (pTmp.Data.Equals(item)) 
     { 
      itemRemove = true; 
      pTmp = pTmp.Next; 
     } 
     else 
     { 
      tempStack.Push(pTmp.Data); 
     } 
    } 
    while (tempStack.Count > 0) 
    { 
     pTmp = pTmp.Next; 
     OurStack.Push(pTmp.Data); 
    } 
    return itemRemove; 
} 

は、ここで私はメソッドをテストするために書いた主なのですが、真に戻ってこないので、決してブールを切り替えることはできません。そこにブレークポイントを置いて見てください。

+0

それは奇妙なことです。私がデバッグすると、最初のwhileステートメントに行き、次に他のコードを通らずに次のwhileステートメントにジャンプします。なぜそれがそれをやっているのかわかりません... – Stephanie

0

OurStack変数の名前かです:(あなたがスタックコンストラクタコードで何かを追加している場合を除きます)、それは常に空になりますのでJECTタイプ? RemoveAllメソッドでは変数名として使用され、テストメソッドでは型として使用されます。

関連する問題