Javascript · Loops
while Loops
The full text of this chapter, to read or revisit. To practise, do the exercises.
▶ Do the exercises
Exercise 1 — Repeat While Something is True
A `for` loop is perfect when you know how many turns you need. But sometimes you only know when to stop: attack until the opponent is KO, train until the level is high enough... That's the job of `while`.
let wildHP = 50; while (wildHP > 0) { console.log("Zap attacks! Wild HP: " + wildHP); wildHP -= 20; } console.log("The wild Codémon is KO!");
The loop checks `wildHP > 0` before each turn. As long as it is `true`, the block runs. As soon as it is `false`, JavaScript jumps to the code after the loop.
Exercise 2 — Anatomy of a while Loop
`while` is simpler than `for`: only a condition, no built-in counter.
while (condition) { // code repeated while the condition is true }
That means you are responsible for changing something inside the block, so the condition eventually becomes `false`. Compare these two versions of the same countdown:
for (let i = 3; i > 0; i--) { console.log(i); }
let i = 3; while (i > 0) { console.log(i); i--; }
The initialization goes before the loop, the update goes inside the block. Same result, same three ingredients, just placed differently.
The Infinite Loop
If the condition never becomes `false`, the loop never stops and your program freezes. Forgetting the `i--` above would do exactly that. Always make sure something in the block moves the condition towards `false`.
Exercise 3 — Predict the while
What will this code print?
let energy = 5; while (energy < 20) { energy += 5; console.log(energy); }
Options
• ```10```, ```15```, ```20```
• ```5```, ```10```, ```15```
• ```5```, ```10```, ```15```, ```20```
• ```10```, ```15```
Hint : Look at the order of the two lines inside the block: the variable changes before it is printed. Then check the condition again with the new value.
Exercise 4 — Complete the while Loop
Complete the loop so Aquachu keeps drinking potions until its HP reaches at least 100.
let aquachuHP = 40; ____ (aquachuHP ____ 100) { console.log("Aquachu drinks a potion"); aquachuHP ____ 25; } console.log("HP: " + aquachuHP);
Options: while < += for > -= if
Hint : The block should keep running as long as the HP is still too low, and every potion should push the HP in the right direction.
Exercise 5 — When You Can't Predict the Number of Turns
The real power of `while` shows up with values you can't predict, like random numbers. Here Pyrochu trains until it reaches level 10, but the XP gained in each session is random:
let level = 1; let sessions = 0; while (level < 10) { let gained = Math.floor(Math.random() * 4) + 1; level += gained; sessions++; console.log("Session " + sessions + ": level " + level); } console.log("Goal reached in " + sessions + " sessions!");
Run it several times: the number of sessions changes every time. A `for` loop couldn't do this, because you don't know the number of turns in advance.
Rule of thumb: known number of turns → `for`. Unknown number of turns but a known stop condition → `while`.
Exercise 6 — How Many Iterations?
What will this code print?
let power = 10; let turns = 0; while (power < 100) { power *= 2; turns++; } console.log(turns);
Options
• ```4```
• ```3```
• ```5```
• ```160```
Hint : Write down the value of the variable after each turn until the condition fails. The answer is how many times the block ran, not the final value.
Exercise 7 — Catch Attempts
You throw balls at a wild Florachu. Each throw has a chance to catch it. Complete the loop so it keeps throwing as long as `caught` is `false`.
let caught = false; let throws = 0; while (caught ____ ____) { throws++; console.log("Throw number " + throws); caught = Math.random() < 0.3; } console.log("Florachu caught after " + throws + " throws!");
Options: === false true = 0 null
Hint : The loop must keep going as long as the catch has not happened yet. Be careful to compare, not assign.
Exercise 8 — Ingredients of a while Loop
Match each piece of a `while` loop with its role.
Items to match
• let i = 3; written before the loop
• while (i > 0)
• i-- inside the block
• Forgetting the update
Definitions
• Initialization of the variable
• Condition checked before each turn
• Update that moves towards the end
• Infinite loop
Exercise 9 — Spot the Infinite Loop
With `hp` starting at 30, which of these loops never ends?
let hp = 30;
Options
• ```while (hp > 0) { console.log(hp); }```
• ```while (hp > 0) { hp -= 10; }```
• ```while (hp < 0) { hp = 0; }```
• ```for (let i = 0; i < 3; i++) { hp--; }```
Hint : For each loop, ask two questions: is the condition true at the start, and does anything inside the block ever change it?
Exercise 10 — Combining Conditions
The condition of a `while` can be as rich as any other condition: comparisons, `&&`, `||`... Here the battle lasts while Pyrochu is alive and at most 5 turns:
let pyrochuHP = 100; let turn = 0; while (pyrochuHP > 0 && turn < 5) { turn++; pyrochuHP -= 30; console.log("Turn " + turn + " - Pyrochu HP: " + pyrochuHP); } console.log("Battle over after " + turn + " turns");
The loop stopped after 4 turns because `pyrochuHP > 0` became `false` first. Try changing the damage to `10`: this time the 5-turn limit is what stops it.
Exercise 11 — Until KO
A wild Metachu with 75 HP appears! Aquachu deals 20 damage per turn. 1. Loop as long as Metachu still has HP 2. Each turn: increase `turns` by 1, reduce `metachuHP` by `damage`, then print `"Turn X: Metachu has Y HP"` 3. After the loop, print `"KO in X turns!"`
Starter code
let metachuHP = 75; let damage = 20; let turns = 0; // Write your loop here
Back to the course