kostenloser Webspace werbefrei: lima-city


J2ME - Zufallszahlen

lima-cityForumProgrammiersprachenJava

  1. Autor dieses Themas

    schumi1331

    Kostenloser Webspace von schumi1331

    schumi1331 hat kostenlosen Webspace.

    Moin zusammen,
    ich bastel gerade daran, mein Applet (Funktion siehe: http://schumi1331.de/informatik/wahlzufall-applet/) zu einem Java-Programm umzufunktionieren.
    Das klappt im Grunde schon ganz gut, nur habe ich ein paar Probleme mit den Zufallszahlen, die bei allen Parteien in etwa gleich sind (in der Handy-Version davon, im Applet klappt es ja).

    Zur Erzeugung benutze ich:
    int zufall(int max) {
            Random generator = new Random();
    		float f = generator.nextFloat();
    		f = (f*max)%max;
    		max = (int)f;
    		return max;
    }


    Zum Aufruf in paint():
    cdu = zufall(16000000);
    		spd = zufall(16000000);
    		fdp = zufall(16000000);
    		gru = zufall(16000000);
    		son = zufall(16000000);


    Die Ergebnisse sind halt immer fast identisch, und das ist nicht Sinn der Sache...

    Weiß jemand, was ich falsch mache?

    EDIT: hab das Problem erstmal damit gelöst:
    (in paint():)
    Random generator = new Random();
    
    cdu = generator.nextInt(16000000);


    Wieso das andere nicht ging, würde mich aber trotzdem interessieren...

    Beitrag zuletzt geändert: 9.5.2011 17:30:43 von schumi1331
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Zufallsgeneratoren sind üblicherweise nicht wirklich zufällig, sondern eher eine Sequenz von Werten, die abhängig von einem Initialwert ("Seed") errechnet werden. Aus einem Seed ergibt sich in der Regel immer genau eine definierte Sequenz, soll heißen: Wenn du einen Generator zweimal mit dem gleichen Seed initialisierst, erhältst du nachher auch die gleichen "Zufallszahlen" (Google-Stichwort: Pseudozufallszahlengenerator).

    Wenn du den Java-Zufallsgenerator mit "new Random()" aufrufst, bekommt er die aktuelle Systemzeit als Seed, welche sich in deinem ursprünglichen Code nicht sonderlich unterscheiden dürfte. Du hast dir also von einem zumindest sehr ähnlichen Seed jedes Mal das erste Element der resultierenden Sequenz geben lassen.

    Deine aktuelle Lösung ist insofern besser, als dass der Generator dort nur ein einziges Mal initialisiert wird und du nachher deine Zufallszahlen aus der selben Sequenz beziehst. Das ist auch die Vorgehensweise, wie man so einen Zufallsgenerator eigentlich benutzt. ;) Zur Performance-Optimierung kannst du dir jetzt noch überlegen, ob du den Generator wirklich bei jedem Aufruf der paint()-Methode neu initialisieren musst, oder ob es nicht reicht, den als Klassen- bzw. Instanzvariable zu haben.

    Warum das im Applet scheinbar funktioniert und auf dem Handy nicht, kann ich dir auch nicht beantworten. Möglicherweise liegt das an einer für dich glücklichen internen Optimierung, möglicherweise läuft das Applet auch nur langsam genug, sodass dort unterschiedliche Seeds erzeugt werden.
  4. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!