2016-08-19 3 views
0

Ich habe folgende Schleife (n). Diese Schleife durchläuft eine Sammlung von Büchern und führt einige logische Überprüfungen bezüglich der Check-in- und Check-out-Daten durch. Es gibt dann ein neues Objekt zurück. Es behaftet auch BuchtitelVerfolgen von Zählern in verschachtelten Schleifen

Es funktioniert OK bis zum Ende der Sammlung. Dann scheinen meine Zähler nicht mehr synchron zu sein und es wird zu einer Endlosschleife. Ich habe verschiedene Permiationen ausprobiert, aber ich kann es nicht richtig funktionieren lassen.

Könnte jemand einen Blick darauf werfen, ob es Sinn macht oder ob ich etwas falsch mache?

Danke!

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); 

Antwort

1

Nur eine kurze Bemerkung:

Ihre pos auf nextPos Ändern der (pos + 1) % books.Count ist. Diese Operation gibt immer Werte zwischen [0 and books.Count - 1] zurück, während Ihre stopPos = books.Count Endlosschleife macht.

Vielleicht müssen Sie Ihre stopPos wechseln ein letztes Buch zu sein, die books.Count-1 ist

+0

Dank. Dies behebt die Zähler bis zum Ende. Dadurch wird das letzte Buch in der Sammlung übersprungen. – SkyeBoniwell

Verwandte Themen