001 package de.hska.java.aufgaben.kontrollstrukturen;
002
003 /**
004 * Eine "totsichere" Gewinnstrategie beim Roulettespiel ist es, immer
005 * auf die selbe Farbe zu setzen. Wenn man verloren hat, dann
006 * verdoppelt man einfach den Einsatz, um den vorherigen Verlust
007 * wieder wett zu machen.
008 * Die Wahrscheinlichkeit das immer rot (oder schwarz) kommt ist
009 * 50% (wir ignorieren das Auftreten der 0).
010 * Diese Klasse enthält eine Methode, die berechnet wieviel Geld
011 * man ungefähr als Kapitel benötigt, wenn man 1 000 000 mal spielt
012 * und der Anfangseinsatz ein Euro ist. Einmal spielen bedeutet
013 * solange zu setzten bis man gewonnen hat. Nach 1 000 000 Spiele hat
014 * man 1 000 000 Euro gewonnen.
015 * Die Eintreffenswahrscheinlichkeit 50% kann man mit Math.random() < 0.5
016 * überprüfen.
017 * Wie viel Geld sollten Sie mitbringen, damit Sie ihren Einsatz nicht
018 * verlieren?
019 *
020 * <p>
021 * <a href="http://www.home.hs-karlsruhe.de/~pach0003/informatik_1/aufgaben/kontrollanweisungen.html#roulette">Zurück zum Aufgabentext</a>
022 * </p>
023 *
024 *
025 * @author Christian Pape
026 */
027 public class Roulette {
028
029 /**
030 * <p>Spielt 1 000 000 mal "Roulette" und berechnet den
031 * maximalen Einsatz, der dabei gemacht wurde.
032 * Dieser liegt immer in der Grössenordnung des zu erhoffenden
033 * Gewinns. Aber manchmal auch das 2 bis 4 fache. Man sollte
034 * also besser 4 Mio Euro mitnehmen.
035 * In seltenen Fällen noch mehr: in diesen Fällen ist das Geld weg,
036 * wenn man zu wenig mitgenommen hat.
037 * </p>
038 * <p>Man könnte im Grunde auch gleich die 1 000 000 Milionen setzten
039 * und hoffen, dass man "Glück" hat. Geht wesentlich schneller.
040 * Oder bei 4 Mio, die man ohnehin schon haben sollte,
041 * lebt man besser von den Zinsen.</p>
042 * <p>Gibt bei einem Startkapital von 4 Mio aus, nach wie vielen
043 * Spielen sie pleite sein könnten.</p>
044 */
045 public static void main(String [] argv) {
046 long maximalerEinsatz = 0;
047
048 for (int spiel = 0; spiel < 1000000; spiel++) {
049 long einsatz = 1;
050 while ( Math.random() < 0.5) {
051 einsatz *= 2;
052 }
053 if (einsatz > maximalerEinsatz) {
054 maximalerEinsatz = einsatz;
055 System.out.println("[" + spiel + "] Max. Einsatz: " + maximalerEinsatz);
056 }
057 }
058
059 long startKapital = 1000;
060 int spiel = 0;
061 while ( startKapital > 0 ) {
062 long einsatz = 1;
063 while ( Math.random() < 0.5) {
064 einsatz *= 2;
065 }
066 if (einsatz > startKapital) {
067 startKapital = 0;
068 } else {
069 startKapital++;
070 }
071 spiel++;
072 }
073
074 System.out.println("Sie haben nach " + spiel + " Spielen kein Geld mehr");
075 }
076 }