2012-01-13 13 views
0

最初のforeachメソッドはいくつかのエラーを受け取ります。私は理由を理解することができず、うまくいくように思えます...キュー/スタッククラスの仕組みの理解と、このコードが動作しない理由の理解

foreach - クラス、構造体、またはインターフェイスメンバー宣言でforeachが無効です。

これは、プリントアウト1 2 3 4 1 2 3 4 1 2 3 4

2 foreachの方法。これはどのように作動しますか?私はそれが順番に一度に1つずつ順番に繰り返されると思う。混乱は、同じコードですが、キューの代わりにスタックします。 2番目のforeachが4 3 2 1を印刷します。なぜこれがですか?

namespace Cards 
{ 
    class Class1 
    { 
     Queue numbers = new Queue(); 

     foreach (int number in new int[4]{1,2,3,4}) 
     { 
      numbers.Enqueue(number); 
      Console.WriteLine(number + " has joined the queue"); 
     } 
     foreach (int number in numbers) 
     { 
      Console.WriteLine(number); 
     } 
     while(numbers.Count > 0) 
     { 
      int number = (int)numbers.Dequeue(); 
      Console.WriteLine(number + " has left the queue"); 
     } 
    } 

} 

答えて

3
コードがメソッドにする必要があります

..

class Class1 
    { 
     public void DoQstuff() 
     { 
      Queue numbers = new Queue(); 

      foreach (int number in new int[4]{1,2,3,4}) 
      { 
       numbers.Enqueue(number); 
       Console.WriteLine(number + " has joined the queue"); 
      } 
      foreach (int number in numbers) 
      { 
       Console.WriteLine(number); 
      } 
      while(numbers.Count > 0) 
      { 
       int number = (int)numbers.Dequeue(); 
       Console.WriteLine(number + " has left the queue"); 
      } 
     } 
    } 

、あなたが最初に出て、最初に、

キューにそれを実行する動作している場合、全体の事は期待通りに動作します... .. 1は最初に入っていたので、最初の部分は

スタックが最初に入っていたので、最初は1だったので、最後のものは

のように、喫茶店に並んでいれば、キューに入っている最初の人が最初に出席しているまで、キューを待つ必要があります。

スタックは、お互いの上に本を積み重ねるようなものです...スタックの上にあるすべての物を積み重ねるまで、スタックから最初のものを取り出すことはできません。

+0

haha​​私はそれを逃したと信じることはできません...ありがとう – healxph0enix

0

スタックは、キューと同じヒューリスティックに従いません。待ち行列では、最初に何が入り、最初に出てくる。スタックでは、FILO(First In、Last Out)を見ています。

これは逆のことが起こっていることを示しています。つまり、4,3,2,1です。

+0

私はLIFOは、より一般的な用語(ラスト・イン・ファースト・アウト)です。前にFILOを使っている人は聞いたことがない – ChrisWue

0

よく! 2番目のループでは、コレクション内のすべての要素を印刷しようとしています。 1)キューの場合、オブジェクトは追加されたときに格納されます。だから、最初のループ(FIFO)のように同じ答えを得ます。 2)スタックの場合、オブジェクトは逆の順序で格納されるので、コレクションからオブジェクトをポップすると、最後に挿入したオブジェクトを削除できます。 (LIFO)

希望することができます。

関連する問題