Zufallszahl zwischen A und B soll sich nicht wiederholen?

  • VB6

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von pinguin2008.

    Zufallszahl zwischen A und B soll sich nicht wiederholen?

    Hallo

    folgendes Problem: ich will eine Zufallszahl zwischen zwei Werten (zb. 0 und 50) haben. Anhand dieser ID wird etwas aus einer Access Tabelle ausgelesen. Danach brauch ich wieder eine Zufallszahl zwischen A und B, doch darf es nicht die vorherige sein.
    Dieses passiert einige male. Wie bekomm ich das hin? Ich hoff ihr versteht, was ich will :D

    Gruß
    Wie wärs mit einer globalen Variable (public lastzufall as Integer), dass den letzten Zufallswert immer wieder speichert? Dann mit einer Schleife die Zufallszahl so oft erstellen, bis die Zufallszahl eine andere Zahl ist als lastzufall

    Visual Basic-Quellcode

    1. Dim zufall As Integer
    2. Do
    3. zufall = CInt(Rnd(Time) * 50)
    4. Loop Until Not zufall = lastzufall
    5. lastzufall = zufall


    Code müsste so stimmen - Nicht überprüft.



    Gruß,
    Travis



    edit: falls du z.B. willst, dass die zufallszahl für min. 5 Runden oder gar nicht mehr im Programm ein zweites Mal kommt, dann legst du am besten einen Array an.

    Visual Basic-Quellcode

    1. Dim zufall(49) As Boolean 'zB bei lotto ziehung
    2. Dim zahl As Integer
    3. Dim i As Integer
    4. Do
    5. Zahl = CInt(Rnd(49)+1)
    6. if zufall(zahl) = false Then
    7. zufall(zahl) = zahl
    8. i = i + 1
    9. End If
    10. Loop Until i = 6


    Einfaches Lotto Beispiel

    pinguin2008 schrieb:



    Ja das können bis zu 20 runden sein, wie mach ich das mit dem arry zu vergleichen, arry immer durchlaufen lassen und prüfen ob zahl schon vorhanden ist?






    Mit einer Schleife immer wieder guckn ob die Zufallszahl im Array schon verhanden ist. Wenn doch, neue Zufallszahl generieren und diesselbe kagge nochma. falls zufalls noch nich im array ist, dann zufallszahl in array schreiben.

    gruß,

    travis



    edit: öh ja. redhells code müsste passn. viel spaß beim weiteren coden.
    hmm ja, bin schon n stück weiter

    Ich will eine Funktion, die mir beim Aufrufen eine noch nicht benutze Zahl ausgibt.
    Ich habs jetzt testweise mal so gemacht, das die Funktion bei drücken eines Buttons ausgeführt wird, und das Ergebnis per Messagebox ausgegeben wird. er gibt mir allerdings nur 2 und 1 aus, dann bin ich scheinbar in einer Endlosschleife.

    Hier meine aktuelle Codeschnipsel:

    Visual Basic-Quellcode

    1. Dim zufall(25) As Boolean
    2. Dim i As Integer
    3. Dim zahl As Integer
    4. Function Zufallszahl(ByVal max)
    5. i = 0
    6. Do
    7. zahl = CInt(Rnd(max) + 1)
    8. If zufall(zahl) = False Then
    9. zufall(zahl) = zahl
    10. i = 1
    11. End If
    12. Loop Until i = 1
    13. Zufallszahl = zahl
    14. End Function
    Tipp von mir: Benutz bei der Zufallsfunktion immer die Zeit (Time) - sie ist am besten als Int für nen zufallsgenerater geeignet - und multiplizier sie mit einer Zahl.
    Cint(Rnd(Time)* 50) ---> ergibt eine Zufallszahl zwischen 1 und 50.

    du warst deswegen in der endschlosschleife, weil du nur eine zufallszahl zwischen 1 und 2 generiert hast diese zwei zahlen aber gespeichert waren. na was für ne zahl soll jetzt noch ausgespeuckt werden? :D

    Ich hoffe, ich konnte helfen.

    naja ich mach jetzt feierabend und geh nach Hause. Bis morgen, Leute.

    Gruß,
    Travis