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!
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
Will this RandomNumber generation do the same thing without future problems or am I missing something?
The teacher taught when generating random numbers between two values to use Math.floor(Math.random() * (top - lower + 1)) + lower. I keep making a typo though and typing it this way Math.floor(Math.floor(Math.random() * (top - lower) + lower) + 1; but this seems to work fine. Is the way to generate number obsolute, if I dont correct this habbit will it cause problems in the future or can I continue to write this way? Also is the + 1 one necessary when generating two values? I thought the + 1 was originally to keep the random number from being 0, but if you're setting the lower number it shouldnt already be zero.
Jason AndersTreehouse Moderator 145,855 Points
For the first part of your question, mathematically it doesn't make a difference if you add
lower first or after adding the one. For me, I think just for style and readability of the code, it is 'nicer' adding the
lower at the end, but that is entirely up to you.
For the second part, adding the one is necessary.
Math.random() generates a random float from (and including) Zero up to (but not including) One.
Because of the float that will be generated, the closest you can get to One is 0.999999999 (example). So, because you will never get a One, and you are using
Math.floor(), it is impossible for the top number in the range to ever come up (because you always round down).
Example. Range of 2 to 10. Math.random() generates 0.925734 which is multiplied by 8 (top - bottom) to get 7.405872. If we don't add the One and just add the lower range of 2, we get 9.405872 and we
Math.floor() to 9. Now if we add the One we get 10.405872 and with
Math.floor(), now we get 10 instead. So without adding One, you can run the generator an infinite number of times, but you will never generate a 10 (top value).
I hope this makes sense and helps your understanding. Keep Coding! :)