Velocity Reviews > Java > a method that returns equal chance of head or tail

# a method that returns equal chance of head or tail

strutsng@gmail.com
Guest
Posts: n/a

 10-07-2005
I need to write a flip method that returns equal chance of head or
tail. Do you think a test for x % 2 is "equal chance"? Well, random
number generator never gets result "equal chance." Is that correct?

public String flip()
{ Random r = new Random();
int x = r.nextInt();
if (x % 2 == 0)
return "H";
}
numTails++;
return "T";
}

Thanks!!

E11
Guest
Posts: n/a

 10-07-2005
Depends on how precisely "equal chance" you want. If you want truly
absolutely equal chance (i.e. out of 1,000,000 invocations, you get
exactly 500,000 heads and 500,000 tails), then you can do this:

int i = 0;
public String flip()
{
i++;
if ((i % 2) == 0)
{
return "H";
}
else
{
numTails++;
return "T";
}
}

Otherwise, your method using the RNG should do fine. BTW, its better to
use the same instance of Random throughout, i.e.:

Random r = new Random();
public String flip()
{
int x = r.nextInt();

if (x % 2 == 0)
{
return "H";
}

numTails++;
return "T";
}

Regards,
Edwin

Roedy Green
Guest
Posts: n/a

 10-07-2005
On 6 Oct 2005 21:45:15 -0700, http://www.velocityreviews.com/forums/(E-Mail Removed) wrote or quoted :

>I need to write a flip method that returns equal chance of head or
>tail. Do you think a test for x % 2 is "equal chance"? Well, random
>number generator never gets result "equal chance." Is that correct?

see http://mindprod.com/jgloss/gotchas.html#RANDOM
--
Canadian Mind Products, Roedy Green.
http://mindprod.com Again taking new Java programming contracts.

Jussi Piitulainen
Guest
Posts: n/a

 10-07-2005
(E-Mail Removed) writes:

> I need to write a flip method that returns equal chance of head or
> tail. Do you think a test for x % 2 is "equal chance"? Well, random
> number generator never gets result "equal chance." Is that correct?
>
>
> public String flip()
> { Random r = new Random();
> int x = r.nextInt();
> if (x % 2 == 0)

Learn about java.util.Random instead, and for heads and tails use its
nextBoolean() method. As the other guy said, move the generator out of
the method; only initialize it once. Now you are really just sampling
the current time, which is not a random generator at all.

Googmeister
Guest
Posts: n/a

 10-08-2005

(E-Mail Removed) wrote:
> I need to write a flip method that returns equal chance of head or
> tail.

Use Random.nextBoolean or (Math.random() < 0.5).

Roedy Green
Guest
Posts: n/a

 10-08-2005
On 8 Oct 2005 03:16:50 -0700, "Googmeister" <(E-Mail Removed)>
wrote or quoted :

>Use Random.nextBoolean or (Math.random() < 0.5).

Stick with nextBoolean unless you are using an early JVM that does
not support it. Beware: there are other ways of doing it that give
biased results.
.. See http://mindprod.com/jgloss/gotchas.html#RANDOM
--
Canadian Mind Products, Roedy Green.
http://mindprod.com Again taking new Java programming contracts.