Мой метод не работает так, как я ожидалC#

Место общения программистов C#
Anonymous
Мой метод не работает так, как я ожидал

Сообщение Anonymous »

Я работаю над программой, которая распределяет людей на миссии в течение дня.
В течение 8 часов я пытался понять, что не так с моим методом. Она должна взять список имен, список миссий и счетчик 24 часов и назначить каждого человека на миссию в час X. Если для этой миссии требуется более одного человека, она попытается назначить и следующего (если нет каких-либо условий, препятствующих назначению этого человека на миссию).
После того, как все люди в списке были назначены, программа должна сбросить список людей, которых нужно назначить, и начать назначать их снова.
Когда я запускаю свой код, выполняется только один раунд присваивания, а остальная часть таблицы остается пустой.
Я пытался выяснить, что не так с логикой, но не могу, и это ТАК РАЗОЧАРОВАЕТ!! Пожалуйста, помогите мне здесь!
Код:
public string[,] AssignPersonsToMission()
{
bool containCondition; // any item of Person.Conditions is in mission.Conditions?
int assignedCounter = 0; // how many people assigned to a mission at given hour
string[,] table = new string[missions.Count, 24]; // columns = missions, rows = hour of day
List personsToAssign = persons; // filling list with people to assign
List assignedPersons = new List(); // a list of people that have been assigned

for (int mission = 0; mission < missions.Count; mission++) //go throught columns
{
for (int hour = 0; hour < 24; hour++) //go through rows
{
if (personsToAssign.Count == 0) //if all the people have been assigned to missions
{
personsToAssign = persons; // refill personsToAssign list with original list of people
assignedPersons.Clear(); // reset assigned Persons list
}
assignedCounter = 0; // reset assignedCounter
foreach (Person person in personsToAssign.ToList()) //go through each person that can be assigned
{
containCondition = missions[mission].Conditions.Intersect(person.Conditions).Any(); // is there any condition in mission that the person has?
//if yes - that person cannot be assigned to the mission
if (!containCondition)
{
table[mission, hour] += person.Name + "|"; //put person in mission at a given hour
assignedPersons.Add(person); // add the person to a list of assigned people
personsToAssign.Remove(person); // remove the person from the list of people to assign
assignedCounter++; // increment how many people assigned to this mission at this hour

if (assignedCounter < missions[mission].NumOfPeople) // if not enough people have been assigned to the mission
{
continue; // go to the next person to assign
}
else { break; } // go the the next hour
} // END OF if (!containCondition)
} // END OF foreach (Person person in personsToAssign.ToList())
} // END OF for (int hour = 0; hour < 24; hour++)
} // END OF for (int mission = 0; mission < missions.Count; mission++)

return table;
}

Вернуться в «C#»