Welcome to the Treehouse Community

Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.

Start your free trial

JavaScript JavaScript Loops, Arrays and Objects Simplify Repetitive Tasks with Loops `do ... while` Loops

Why does this version of a 'do, while' number guessing game not work?

While revising the 'do, while' loop video and exercise, I tried this, but it doesn't work.

I think it generates a condition that will always evaluate 'true', but can someone clarify this more?

Is there anything wrong with generating a random number (1 - 10) and storing it in a variable in this way?

var randomNum = Math.floor(Math.random() * 10 + 1);

do {
  var guess = prompt("Guess a number between 1 and 10.");
  parseInt(guess);
} while ( guess !== randomNum )

document.write("you guessed the random number is " + randomNum);

4 Answers

Hmm, that code seems to work for me. I added an alert so I'd know what number it had, and ran it a few times without error:

var randomNum = Math.floor(Math.random() * 10 + 1);

do {
  alert(randomNum)
  var guess = parseInt(prompt("Guess a number between 1 and 10."));
} while ( guess !== randomNum )

document.write("you guessed the random number is " + randomNum);

ho there!

parseInt returns the value, it doesn't change the variable in place, so the guess is always a string, so the condition is always false.

for example:

name = prompt("What's your name?") 
alert(name)
parseInt(name)
alert(name)
name = parseInt(name)
alert(name)

Only once the returned value is assigned to the variable does name change, so name becomes NaN because something like "Bob" isn't a number, so that's what parseInt() returns.

If you used this comparison:

while ( guess != randomNum )

You also wouldn't get the infinite loop, because == will attempt type conversion (though it's better to parseInt and use === usually)

Hope it helps :)

You're right - it does work.

When I first tested the code I kept entering the same number, thinking that 'var randonNum' was generating a new random number each time. But testing it again, I entered 1 then 2, and up to 10 if necessary, before I got the single random number value stored in 'randomNum'.

Thanks for looking at this Jon.

No worries!

Mistakes are a good thing - just yesterday I spent 20 minutes trying to work out why a test I'd put in my code wasn't working, then remembered I'd commented out it's output lol.

It's the code that works first time you've really gotta be scared of lol

This was an earlier attempt that I think addresses the parsing and storing of the number value in 'guess', but it is still not working ?

var randomNum = Math.floor(Math.random() * 10 + 1);

do {
  var guess = parseInt(prompt("Guess a number between 1 and 10."));
} while ( guess !== randomNum )

document.write("you guessed the random number is " + randomNum);