Collinar

11-10-2012, 03:06 PM

I tried writing a program using Math.random and if, else if and else...

This is what I wrote:

var co1 = Math.random(1, 5);

var co2 = Math.random(1, 5);

if (co1 > co2){

console.log("1 wins!");

}

else if (co2 > co1){

console.log("2 wins!");

}

else co2 === co1;

console.log("TIE!")

Now when I run it, I always get "1 wins!" or "2 wins!" and a "TIE!".

for example:

Running:

1 wins!

TIE!

Running:

2 wins!

TIE!

Why is this happening? And how could I stop the Tie from being written without deleting it completly from the program?

Logic Ali

11-10-2012, 03:11 PM

This is what I wrote:

var co1 = Math.random(1, 5);

var co2 = Math.random(1, 5);

What documentation did you read to get the usage of Math.random ?

Philip M

11-10-2012, 03:15 PM

<script type = "text/javascript">

var co1 = Math.ceil(Math.random() *5); // integer 1-5

var co2 = Math.ceil(Math.random() *5);

if (co1 > co2) {

alert ("1 wins!");

}

else if (co2 > co1){

alert ("2 wins!");

}

else if (co2 == co1) {

alert ("TIE!");

}

</script>

console.log("TIE!") says do just that. It is not contained within an if/else clause.

When the questions are being asked, that's when you come up with the answers.

Old Pedant

11-10-2012, 08:23 PM

This is wrong, Philip:

var co1 = Math.ceil(Math.random() *5);

There is a vanishingly small but still finite chance that Math.random() can return a value of ZERO.

And so on those (admiittedly very rare) occasions when it does so, Math.ceil(0) is 0 and you get a number outside the desired range.

To avoid even a *chance* of that happening you really should do

var co1 = 1 + Math.floor(Math.random() * 5);

Philip M

11-10-2012, 09:03 PM

This is wrong, Philip:

var co1 = Math.ceil(Math.random() *5);

There is a vanishingly small but still finite chance that Math.random() can return a value of ZERO.

And so on those (admiittedly very rare) occasions when it does so, Math.ceil(0) is 0 and you get a number outside the desired range.

To avoid even a *chance* of that happening you really should do

var co1 = 1 + Math.floor(Math.random() * 5);

Yes, you are quite right. As you say, a vanishingly small chance but still possible to return zero. But that would not affect this particular script, even if zero came up.