2016-08-19 11 views
0

次のループがあります。このループは書籍のコレクションを横断し、チェックインとチェックアウトの日付に関するいくつかの論理チェックを行います。次に、新しいオブジェクトを返します。また、本のタイトルを繋ぐネストされたループのカウンターの追跡

それはコレクションの終わりに達するまで正常に動作します。それから私のカウンターは同期していないように見え、それは無限ループに変わります。私は別のpermimateを試みたが、私はちょうどそれが正しく動作するようにすることはできません。

これは目を見張るものか、私が何か間違っているかどうかを誰かに見せてもらえますか?

ありがとうございます!

private static readonly TimeSpan gracePeriodTimeSpan = TimeSpan.Parse("23:00"); 

     //current posistion in books collection 
     currentPos = pos % books.Count; 

     //posistion to stop at 
     var stopPos = books.Count; 

     do 
     { 
      //start is current posistion 
      var startPos = pos; 

      //assign the next posistion 
      var nextPos = (pos + 1) % books.Count; 
      bookTitle = bookTitle + ";" + books[pos].Title; 

      //loop until we hit the stop posistion - check book CheckInDate/CheckOutDate proximity 
      while ((nextPos != stopPos || nextPos !=0) && books[pos].CheckInDate + gracePeriodTimeSpan >= books[nextPos].CheckOutDate) 
      {     
       pos = nextPos; 
       nextPos = (pos + 1) % books.Count; 
      } 
      bookTitle = bookTitle + ";" + books[pos].Title; 

      //return new book checkout object 
      yield return 
       CreateNewBookCheckout(bookTitle, books[pos], books[startPos].CheckOutDate, 
        books[pos].CheckInDate); 

      bookTitle = ""; 
      pos = nextPos; 

      //keep going til we hit the stop posistion 
     } while (pos != stopPos); 

答えて

1

だけで簡単に観察:

あなたpos(pos + 1) % books.CountあるnextPosに変化しています。 この操作は、無限ループを行うstopPos = books.Countの間に常に[0 and books.Count - 1]の間の値を返します。

たぶん、あなたはbooks.Count-1

+0

おかげで最後の本であるためにあなたのstopPosを切り替える必要があります。これにより、カウンタが最後まで固定されます。これにより、ループ内の最後の本をスキップします。 – SkyeBoniwell

関連する問題