Ending a loop and returning to the previous loop
Hi there,
I'm facing a problem I've faced a few times in the past and have always been able to work around using the goto keyword, though I know this is a very bad habit to get into and I'm hoping someone might help suggest an alternate solution.
//if TileSpace contains a tile conflicting with conditions, return
for (int j = 0; j < baseContent.Count; j++)
{
if (baseTile.Contains(baseContent[j]) == baseContentCondition)
{
goto End:
}
}
The code above checks a list of strings and if they meet a specified condition, the iteration of the initial loop ends, but I don't know how to break from this loop and skip the code below without having a boolean check (ie if(baseTile.Contains(baseContent[j]) == baseContentCondition) is true, set a bool to true and break, and then check that bool to see whether to skip the rest of the code.
private void ConditionalTilePlacement(string resourceName, int offsetX, int offsetY, bool baseContentCondition, List<string> baseContent, bool targetContentCondition, List<string> targetContent)
{
int childCount = transform.childCount;
//loop for all children of MapGen
for (int i = 0; i < childCount; i++)
{
TileSpace baseTile = transform.GetChild(i).GetComponent<TileSpace>();
//if TileSpace contains a tile conflicting with conditions, return
for (int j = 0; j < baseContent.Count; j++)
{
if (baseTile.Contains(baseContent[j]) == baseContentCondition)
{
goto End:
}
}
//if target tilespaces does not exist, create new tile at target
if (!tileSpaces[baseTile.X + offsetX, baseTile.Y + offsetY])
{
NewTile(baseTile.X + offsetX, baseTile.Y + offsetY);
}
//if Target TileSpace contains a tile conflicting with conditions, return
for (int j2o = 0; j2o < targetContent.Count; j2o++)
{
if (tileSpaces[baseTile.X + offsetX, baseTile.Y + offsetY].Contains(targetContent[j2o]) != targetContentCondition)
{
continue;
}
}
//create tile on target, in tilespaces
tileSpaces[baseTile.X + offsetX, baseTile.Y + offsetY].Add(m_resources.Get(resourceName), resourceName);
End:
}
}
Bit of an odd question, but if anyone has any suggestions please let me know, and sorry if I've worded my question poorly.
Answer by Thimble2600 · Jun 20, 2016 at 12:59 PM
Found a solution I'm comfortable with
int err = 0;
//if TileSpace contains a tile conflicting with conditions, return
for (int j = 0; j < baseContent.Count; j++)
{
err += baseTile.Contains(baseContent[j]) == baseContentCondition ? 0 : 1;
}
if (err > 0)
continue;
Your answer
Follow this Question
Related Questions
Accessing variables from a for loop 1 Answer
Breaking out of the right loop 1 Answer
what is wrong with my for loop? 3 Answers
Switching out GameObject with Prefab? 2 Answers