let beerBottles = 99;
let beerBottlesAfter = beerBottles--;
while (beerBottles > 0) {
console.log(
beerBottles +
' bottles of beer on the wall, ' +
beerBottles +
' bottles of beer. Take one down and pass it around, ' +
beerBottlesAfter +
' bottles of beer on the wall.'
);
}
beerBottles--;
console.log(
'No more bottles of beer on the wall, no more bottles of beer.Go to the store and buy some more, 99 bottles of beer on the wall.'
);
I’m going through my code step by step, and in my head it works, but it doesn’t work when i actually run it.
Now I understand that this is not the solution, but i can’t seem to understand WHY my code isn’t correct. Can someone help me understand why my code is wrong?
The main issue is the infinite loop.
You have this condition here
But since you are not updating the value of beerBottles inside the loop, that condition will always be true.
Once you fix that, then the infinite loop will go away.
Your other issue is here
When you use the decrement operator after the variable name like this, it is called the postfix.
The postfix syntax returns the value before it decrements.
So what you are assigning here is actually the value of 99. Not 98 like you think.
You can learn more about the postfix and prefix syntax here
The other issue is that before your loop starts, you are already decrementing the beerBottles values. That means when your prints statements start, it will show 98 bottles instead of 99 like the song traditionally goes.
My advice is to rethink this line of code here completely because it is causing issues.
Once you fix those issues, then the program will run like you expect it to
I tried to fix it by incorporating your feedback, and this is my second version:
let beerBottles = 99;
while (beerBottles > 0) {
console.log(
beerBottles-- +
' bottles of beer on the wall, ' +
beerBottles +
' bottles of beer. Take one down and pass it around, ' +
beerBottles +
' bottles of beer on the wall.'
);
}
--beerBottles;
console.log(
'No more bottles of beer on the wall, no more bottles of beer.Go to the store and buy some more, 99 bottles of beer on the wall.'
);
As you can see, i completely removed let beerBottlesAfter = beerBottles--;.
I forgot that if you reassign a variable ( in this case the decremented beerBottles, and beerBottles--; is the same as beerBottles = beerBottles-1; ) in any way, that variable is reassigned from that line of code onwards. (sorry if i’m not using the correct terminology btw, still getting used to it )
I made the first beerBottles inside the ‘while’ loop have a postfix decrement, so that the result starts decrementing after the first loop only.
Lastly, I made the beerBottles--; outside of the ‘while’ loop to have a prefix decrement instead of a postfix decrement.
Now I ran this new version of my code and I’m happy with the result .