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()); } }