Ziege ziehen

mettKopf

Neues Mitglied
Könnte mir jemand erklären, weshalb der Spieler häufiger die Ziege zieht, wenn er nach der Frage des Quizmasters nicht die Tür wechselt?

Java:
import java.util.Random;

public class Ziege {
    public static void main(String[] args) {
        int switchDoor = 0;
        int noSwitchDoor = 0;
        for (int i = 0; i < 100_000; i++) {
            switchDoor += simulate(true);
            noSwitchDoor += simulate(false);
        }
        System.out.printf("Switch door: %f%%%n", switchDoor / 1000.);
        System.out.printf("No switch door: %f%%%n", noSwitchDoor / 1000.);
    }

    private static int simulate(boolean switchDoor) {
        Random random = new Random();
        final int ziegeAt = random.nextInt(3);
        final int playerChoose1 = random.nextInt(3);
        if (ziegeAt == playerChoose1) {
            // The player has chosen the door with the goat behind it.
            return 0;
        }
        int playerChoose2;
        do {
            playerChoose2 = random.nextInt(3);
        } while (playerChoose2 == playerChoose1);
        // Ask the player to switch the chosen door:
        if (switchDoor) {
            playerChoose2 = playerChoose1 ^ playerChoose2 ^ 3;
        }
        if (playerChoose2 == ziegeAt) {
            // The player has chosen the door with the goat behind it.
            return 1;
        }
        // The player has chosen the door with the car behind it.
        return 2;
    }
}
 

Blender3D

Top Contributor
Könnte mir jemand erklären, weshalb der Spieler häufiger die Ziege zieht, wenn er nach der Frage des Quizmasters nicht die Tür wechselt?
Hier zuerst der überarbeitete Code der das Problem simuliert.
Java:
import java.util.Random;

public class GoatProblem {
    static final Random rnd = new Random(System.currentTimeMillis());
    static final int NUM_TRIES = 100_000;

    public static void main(String[] args) {

        int winSwitch = 0;
        int winNoSwitch = 0;
        // Make NUM_TRIES of games with door change and no door change
        for (int i = 0; i < NUM_TRIES; i++) {
            winSwitch += doGame(true);
            winNoSwitch += doGame(false);
        }
        System.out.printf("Switch door winnner:\t %d\n", winSwitch);
        System.out.printf("No switch door winnner:\t %d\n", winNoSwitch);
    }

    /**
     * @param switchDoor Player switch door or not.
     * @return 1 or 0 player wins or loose.
     */
    private static int doGame(boolean switchDoor) {
        final int carAt = getRndDoor();
        final int playerChoose = getRndDoor();
        if (!switchDoor)
            return carAt == playerChoose ? 1 : 0;
        int moderatorOpenDoor;
        do {
            moderatorOpenDoor = getRndDoor();
        } while (moderatorOpenDoor == carAt || moderatorOpenDoor == playerChoose);
        return carAt == playerChoose ? 0 : 1;
    }

    private static int getRndDoor() {
        return rnd.nextInt(3);
    }
}

@M.L hat dir die Theorie dazu bereits geschickt.
 

KonradN

Super-Moderator
Mitarbeiter

shokwave

Mitglied
@blender Nur der Vollständigkeit halber: Den Teil mit dem Türöffnen kann man auch weglassen.
Java:
private static int doGame(boolean switchDoor) {
    final int carAt = getRndDoor();
    final int playerChoose = getRndDoor();
    if (!switchDoor)
        return carAt == playerChoose ? 1 : 0;
    return carAt == playerChoose ? 0 : 1;
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
O Ziehen im Array um einen Schritt in eine einzige beliebige Richtung Java Basics - Anfänger-Themen 5
T Lottozahlen ziehen Java Basics - Anfänger-Themen 19
S GUI kann im WindowBuilder nicht mehr (größer kleiner ziehen) Java Basics - Anfänger-Themen 2
I Zeichen aus String ziehen Java Basics - Anfänger-Themen 3
L Applikativer Algorithmuss Wurzel ziehen Java Basics - Anfänger-Themen 10
K Methoden "ziehen ohne zurücklegen" - Kontrollstruktur Java Basics - Anfänger-Themen 4
A Werte per Zufall aus einer Datei ziehen und in eine neue Datei schreiben Java Basics - Anfänger-Themen 9
A Karten ziehen Java Basics - Anfänger-Themen 11
T Aus object Array Double Werte ziehen Java Basics - Anfänger-Themen 10
L Randomisierung einer Liste: Ziehen ohne Zurücklegen Java Basics - Anfänger-Themen 5
K JFrame größer ziehen Java Basics - Anfänger-Themen 5
N Datentypen Wurzel aus long ziehen Java Basics - Anfänger-Themen 4
J wurzel ziehen Java Basics - Anfänger-Themen 2
J aktuellen Timestamp ziehen Java Basics - Anfänger-Themen 3
H Rechteck ziehen bei einer Application Java Basics - Anfänger-Themen 2
M Werte quadrieren und Wurzel ziehen Java Basics - Anfänger-Themen 22
R Wurzel ziehen? Java Basics - Anfänger-Themen 24
G gezeichnetes nach Fenster ziehen weg? Java Basics - Anfänger-Themen 2
7 Wurzel ziehen geht nicht :-( Java Basics - Anfänger-Themen 23
P Wurzel ziehen Java Basics - Anfänger-Themen 17
T Wurzel aus einer Double-Zahl ziehen Java Basics - Anfänger-Themen 9
U programmfrage (wurzel ziehen) Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben