ik maak er dit van:
public int random(){
return (int)(3*Math.random());
}
Nu krijg ik steeds zo'n 666 wasmachines, zoals te verwachten was.
Je trekt je random generator nogal gauw een niet-random hoek in als je er kunstjes mee doet...
import java.util.*;
public class DrieDeurenProbleem
{
public static void main(String[] args)
{
Generator generator = new Generator(args[0]);
}
}
class Generator
{
public Generator(String wissel)
{
int winst = 0;
for (int i = 1; i < 1000; i++)
{
// ken aan een van de deuren de wasmachine toe
int wasmachine = random();
// doe een eerste keuze1
int keuze1 = random();
// "open" een deur die niet gekozen is en waar geen
// wasmachine achter zit
int eerstGeopend = 10;
for (int j = 0; j < 3; j++)
{
eerstGeopend = j;
if (eerstGeopend != wasmachine && eerstGeopend != keuze1)
{
break;
}
}
int keuze2 = 10;
// open de niet gekozen deur
if (wissel.equals("Y"))
{
for (int k = 0; k < 3; k++)
{
keuze2 = k;
if (keuze2 != keuze1 && keuze2 != eerstGeopend)
{
break;
}
}
}
// open de eerstgekozen deur
else
{
keuze2 = keuze1;
}
if (keuze2 == wasmachine) winst = winst + 1;
}
System.out.println("Je hebt " + winst + " wasmachines gewonnen.");
}
// genereer willekeurig getal van 0 t/m 2
public int random()
{
double temp = 10;
do
{
temp = Math.random() * 10;
}
while(temp > 2.0);
Double obj = new Double(temp);
int res = obj.intValue();
return res;
}
}
while(eerstGeopend > 2)
{
eerstGeopend = random();
if (eerstGeopend <= 2 && eerstGeopend != wasmachine && eerstGeopend != keuze1)
{
break;
}
}
Random levert altijd 0, 1 of 2 op. Die while doet het dus altijd 1 en niet meer dan 1 keer, dat kan dus weg. 'break' is dan niet interessant meer.Je bedoelt eigenlijk: while(true)...
import java.util.*;
public class DrieDeurenProbleem
{
public static void main(String[] args)
{
Generator generator = new Generator(args[0]);
}
}
class Generator
{
public Generator(String wissel)
{
int winst = 0;
for (int i = 1; i < 1000; i++)
{
// ken aan een van de deuren de wasmachine toe
int wasmachine = random();
// doe een eerste keuze1
int keuze1 = random();
// "open" een deur die niet gekozen is en waar geen
// wasmachine achter zit
int eerstGeopend = 10;
//for (int j = 0; j < 3; j++)
while(eerstGeopend > 2)
{
eerstGeopend = random();
if (eerstGeopend <= 2 && eerstGeopend != wasmachine && eerstGeopend != keuze1)
{
break;
}
}
int keuze2 = 10;
// open de niet gekozen deur
if (wissel.equalsIgnoreCase("Y"))
{
//for (int k = 0; k < 3; k++)
while(keuze2 > 2)
{
keuze2 = random();
if (keuze2 <= 2 && keuze2 != keuze1 && keuze2 != eerstGeopend)
{
break;
}
}
}
// open de eerstgekozen deur
else
{
keuze2 = keuze1;
}
if (keuze2 == wasmachine)
{
winst = winst + 1;
}
}
System.out.println("Je hebt " + winst + " wasmachines gewonnen.");
}
// genereer willekeurig getal van 0 t/m 2
public int random()
{
return (int)(3*Math.random());
}
}