Echte Zufallszahlen

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von xazen, 05.04.2011.

  1. xazen, 05.04.2011 #1
    xazen

    xazen Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    79
    Erhaltene Danke:
    0
    Registriert seit:
    09.12.2010
    Hallo Leute,

    ich hab mal wieder eine Frage. Dachte erst, dass es sicher nicht so schwer wird. Aber nachdem ich mich genauer informiert habe, scheint es doch schwerer zu sein als ich denke?

    Jedenfalls würde ich gerne irgendwie echte Zufallszahlen generieren. Keine Pseudo-Zufallszahl.
     
  2. Kranki, 05.04.2011 #2
    Kranki

    Kranki Ehrenmitglied

    Beiträge:
    3,831
    Erhaltene Danke:
    814
    Registriert seit:
    19.07.2009
    Tablet:
    Samsung Galaxy Tab 3 7.0 Lite
    Ich kann mir nicht vorstellen, dass du tatsächlich eine Anwendung hast, bei der du einen Unterschied bemerken würdest.
    In Software kannst du das jedenfalls nicht machen. Du kannst dir höchstens online eine ziehen von irgendwo.
     
  3. xazen, 05.04.2011 #3
    xazen

    xazen Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    79
    Erhaltene Danke:
    0
    Registriert seit:
    09.12.2010
    ich habe eine View Klasse, wo mithilfe eines zufällig generierten Integers das Verhalten eines KIs bestimmt wird. Manchmal machen 2 Verhalten gleich viel Sinn und ich wil es dem Zufall überlassen, damit der Ausgang des Spiels immer ein anderer ist. Es ist etwas blöd, wenn die KI immer das gleiche macht und man die KI immer über die gleiche Art und Weise besiegen kann.
     
  4. DieGoldeneMitte, 05.04.2011 #4
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    Für Dein Vorhaben sollte der normale PRNG aus java.util.Random reichen. Du kannst ihn ggf mit der aktuellen Zeit zu Beginn des Spieles seeden.

    "Echten" Zufall gibt es Rechner natürlich nicht, aber mit Kryptografischen Hashes (siehe java.security.SecureRandom) kommt man da schon nahe dran.

    Man beachte aber, dass dann eine Zufallszahl mit höhrerem Rechenaufwand einher geht, und dass die Krypto-Engine von Android (momentan) die Bouncycastle-Implementierung ist (da funktionieren viele Beispiele aus dem Netz nicht, da diese idR die SUN Implementierung nutzen)
     
    Zuletzt bearbeitet: 05.04.2011
  5. xazen, 05.04.2011 #5
    xazen

    xazen Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    79
    Erhaltene Danke:
    0
    Registriert seit:
    09.12.2010
    Code:
    int random = (int) (Math.random()*0+1);
    Über den Code habe ich immer: 1 bekommen. Jedenfalls nach etwa 10x.
    Für das Verhalten brauche ich 2 Zufallszahlen. Und der hatter immer das gleich gemacht. Dabei gibt es noch 3 andere Möglichkeiten.

    Wie würde es denn mit Random klappen ? Wenn es mit Random geht, würde ich wohl erne für etwas mehr Performance bei Random bleiben.
     
  6. miha, 05.04.2011 #6
    miha

    miha Fortgeschrittenes Mitglied

    Beiträge:
    294
    Erhaltene Danke:
    43
    Registriert seit:
    12.01.2010
    *0 ??? Hast du dich nur hier vertippt? So wie es da steht ist doch 1 korrekt.
    Am Anfang ein Seed mit Zeit - und random ist für 99 % Zufall genug.
     
  7. xazen, 05.04.2011 #7
    xazen

    xazen Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    79
    Erhaltene Danke:
    0
    Registriert seit:
    09.12.2010
    genau meinte natürlich * 1 + 1

    ich werde mir das mit dem Seed dann mal anschauen. Danke
     
  8. DieGoldeneMitte, 05.04.2011 #8
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    • random() ist eine Zahl zwischen 0 und 1,
    • *1 ändert nix daran
    • und +1 liefert eine Zahl zwischen 1 und 2.
    • die per (int) nach unten runden liefert 1.
    Mit random() * 2 + 1 hättest Du mehr Erfolg.
     
  9. xazen, 05.04.2011 #9
    xazen

    xazen Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    79
    Erhaltene Danke:
    0
    Registriert seit:
    09.12.2010
    Um Missverstände zu vermeiden poste ich einfach nochmal so wie ich es wirklich als Methode hatte:

    Code:
        [B]public[/B] [B]static[/B] [B]int[/B] randomZahl([B]int[/B] untere, [B]int[/B] obere)
        {
        [B]int[/B] spanne = obere - untere;
        [B]return[/B] ([B]int[/B]) (Math.[I]random[/I]()*spanne+untere);
        }
    
    Müsste ja also funktionieren ?
     
  10. garak, 05.04.2011 #10
    garak

    garak Ehrenmitglied

    Beiträge:
    8,270
    Erhaltene Danke:
    4,794
    Registriert seit:
    12.12.2009
    Ich würde das viel einfacher machen:

    Code:
    if (new Date().getTime() % 2 == 0)
      // Lösung 1
    else
      // Lösung 2
    
    Somit ist - abhängig wann das Spiel beendet wurde - entscheidend ob gerade eine gerade oder eine ungerade Millisekunde dran ist. Vollkommen ausreichend.
     
  11. DieGoldeneMitte, 05.04.2011 #11
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    Nicht, wenn randomZahl() die Werte von untere bis obere (einschließlich) liefern soll. Denn das sind obere-untere+1 verschiedene mögliche Werte. Zähl mal nach :D
     
    Zuletzt bearbeitet: 05.04.2011
  12. Kranki, 05.04.2011 #12
    Kranki

    Kranki Ehrenmitglied

    Beiträge:
    3,831
    Erhaltene Danke:
    814
    Registriert seit:
    19.07.2009
    Tablet:
    Samsung Galaxy Tab 3 7.0 Lite
  13. ko5tik, 05.04.2011 #13
    ko5tik

    ko5tik Android-Experte

    Beiträge:
    620
    Erhaltene Danke:
    40
    Registriert seit:
    14.10.2009
    Phone:
    HTC Hero
    Nimm doch den Beschleunigungsmesser - das Billigteil ist so was von verrauscht das es
    einen brechränkten Anzahl der Werte ziemlich zufällig ausgibt.

    Andere Sensoren könnten auch interessant sein
     
  14. xazen, 05.04.2011 #14
    xazen

    xazen Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    79
    Erhaltene Danke:
    0
    Registriert seit:
    09.12.2010
    danke das ist eine sehr gute Alternative :)
     

Diese Seite empfehlen