- Home /
While "loop" with 2conditions, ends before it reach the conditions oO ?
hi there, i'm currently under trouble with a "while" in a method.
currentPathX = 3;
currentPathY = 4;
mapSizeX = 5;
mapSizeY = 5;
int endBlockX = 3;
int endBlockY = 0;
int start = 0;
mapPath[beginningBlockX, beginningBlockY] = "main_"+start;
//Debug.Log("starting block = "+ mapPath[beginningBlockX, beginningBlockY]);
do
{
// 0 = LEFT, 1=RIGHT, 2 = BOTTOM
int randomDir = Random.Range(0, 3);
//Debug.Log("random = " + randomDir);
if (randomDir == 0 && (currentPathX - 1) >= 0)
{
if (mapPath[currentPathX - 1, currentPathY] == null)
{
start += 1;
mapPath[currentPathX - 1, currentPathY] = "main_" + start;
currentPathX -= 1;
}
}
if (randomDir == 1 && (currentPathX + 1) <= mapSizeX)
{
if (mapPath[currentPathX + 1, currentPathY] == null)
{
start += 1;
mapPath[currentPathX + 1, currentPathY] = "main_" + start;
currentPathX += 1;
}
}
if (randomDir == 2 && (currentPathY - 1) >= 0)
{
if (mapPath[currentPathX, currentPathY - 1] == null)
{
start += 1;
mapPath[currentPathX, currentPathY - 1] = "main_" + start;
currentPathY -= 1;
}
}
Debug.Log("CurX = " + (currentPathX+1) + " CurY = " + (currentPathY+1) + " End X + Y = " + (endBlockX+1) + "-" + (endBlockY+1));
//RollPath(start);
} while ((currentPathX != endBlockX) && (currentPathY != endBlockY));
Its a 5x5 array, with the beginning position in the top middle, and the end in the bottom middle. I'm loop until it reach the bottom (it can only move left/right and bottom, and retry the random direction if its blocked or going in an existing path.
The problem is that currently, the "While" loop is stopping at a 3-3 position when it should reach a 3-0 position. I don't understand why it doesn't stop when it should meet both conditions.
(The debug log return a 3-3 in the last loop it did, while the condition are correct and return a 3-0 position.)
The while can't meet 2 conditions ?
Thanks in advance
Answer by Bunny83 · May 08, 2018 at 07:42 PM
Your loop will only continue when both conditions evaluate to true. That means when one of them is false it will exit. You probably want a condition like this:
while ((currentPathX != endBlockX) || (currentPathY != endBlockY));
Another way to express the same condition is this:
while (!(currentPathX == endBlockX && currentPathY == endBlockY));
Hoo indeed i didn't thought that way.
In my head the logic was "it will continue to loop IF both are not meet, so it will end ONLY if both became equal. Thanks a lot (hard to get all the logic of code when you are basically a graphist and not a dev XD).
Your answer
Follow this Question
Related Questions
spawn objects in random locations, check if location already taken 1 Answer
Stop Current Coroutine, Then Restart It 1 Answer
While Loop & Bool (infinite loop freeze) 1 Answer
Spawn Sytem and collider-Trigger to disabling / re-enabling same Collider in a While 1 Answer
Vector3.MoveTowards becomes instant in while loop or freezes unity 1 Answer