Zahlengenerator ohne Wiederholungen erstellen

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von der_Kurt.

    Zahlengenerator ohne Wiederholungen erstellen

    Hallo liebes Forum,

    ich hoffe ich bin hier richtig, denn ich habe mir gestern ein Programm erstellt, mit VB 2010, um ein Zahlengenerator zu erstellen.
    Ziel:
    Jeder in meinem Clan bekommt eine Nummer zugewiesen, mit dem Generator lose ich dann Team 1 bzw. Team 2 aus. Läuft an sich perfekt, ich kann sogar die Anzahl der Spieler im Programm auswählen, nur wiederholt sich das Ergebnis andauernd! Also wenn ich bei Spieleranzahl z.B. 12 eingebe, dann kommt es vor dass 2 mal die 4 vorkommt oder so. Welchen Code brauch ich dafür? Ich bin ein Newbie, also bitte einfach erklären :D

    LG Phil
    Ich nehme mal an, du generierst die Zufallszahlen mit der Random Klasse?

    Weil Eine Verwendung von Random wie hier, produziert immer das selbe Ergebniss.

    VB.NET-Quellcode

    1. Msgbox(New Random().Next(100))


    Ich glaube Random muss fest instanziert werden.

    Zeige mal die verantwortliche Codestelle.
    Was in diesem Kontext sinnvoller wäre, wäre eine Art ID die etwas Länger als eine Zahl ist.

    Liebe Grüße
    /nicht getestet

    VB.NET-Quellcode

    1. Dim Random As New Random
    2. Dim Zufallswert As Integer = Random.Next(startwert, maximalwert)


    Das Speicherst du in einer List(Of Integer) und überprüfst jedes mal, ob der wert schon in der Liste ist, ansonsten ruft sich die Funktion erneut auf ;)
    So lautet jetzt mein Code, funzt aber immernoch nich! Also ich will natürlich nich nur 2 mal hintereinander ne Wiederholung, sondern generell NIE eine wiederholung, also solange ich auf diesen Button drücke, soll diese Zahl nicht vorkommen!

    Quellcode

    1. Public Class Form1 Dim ourrandom As New Random Dim Zufallswert As Integer = ourrandom.Next(1, 14)
    2. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    3. Label5.Text = ourrandom.Next(MaskedTextBox1.Text, MaskedTextBox2.Text + 1) End Sub
    4. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    5. End Sub
    6. Private Sub Label5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label5.Click
    7. End Sub
    8. Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
    9. End Sub
    10. Private Sub Label4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label4.Click
    11. End SubEnd Class

    gegphil schrieb:

    Public Class Form1
    Dim ourrandom As New Random
    Dim Zufallswert As Integer = ourrandom.Next(1, 14)
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Label5.Text = ourrandom.Next(MaskedTextBox1.Text, MaskedTextBox2.Text + 1)
    End Sub
    '...
    End Class
    Das funktioniert nicht. Gib Deinem Code Option Strict On.
    Pack die Instanziierung von ourrandom in die Form_Load:

    VB.NET-Quellcode

    1. Private ourrandom As Random
    2. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    3. ourrandom = New Random
    4. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich bin hier der totale Noob, aber ich hab das jetzt so eingegeben, funzt immernoch nich:

    Quellcode

    1. Option Strict OnPublic Class Form1 Private ourrandom As New Random
    2. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    3. Label5.Text = ourrandom.Next(MaskedTextBox1.Text, MaskedTextBox2.Text + 1)
    4. End Sub
    5. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    6. End Sub
    7. Private Sub Label5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label5.Click
    8. End Sub
    9. Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
    10. End Sub
    11. Private Sub Label4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label4.Click
    12. End Sub Private ourrandom As Random Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ourrandom = New Random End Sub
    13. End Class

    RodFromGermany schrieb:

    Das funktioniert nicht. Gib Deinem Code Option Strict On.
    Pack die Instanziierung von ourrandom in die Form_Load:

    VB.NET-Quellcode

    1. Private ourrandom As Random
    2. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    3. ourrandom = New Random
    4. End Sub
    Möglicherweise fällt Dir auf, dass die Variable ourrandom nun zwei Mal deklariert ist.
    Korriggiere dies.
    Du musst schon die Initiative ergreifen, fertigen Code gibt es nicht.
    Lerne aus den Fehlern und denke mit, wenn Du Code kopierst.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Abgesehen davon, dass dieses Thema hier im Forum Dauergast ist (Zufallszahlen ohne Wiederholung), und Picoflops Beispielcode dafür eigentlich schon in die Boardregeln geschrieben werden sollte:
    Wenn ich 20 Mal mit einem Würfel würfle (=Zufallszahl), dann können Werte doppelt kommen.
    Wenn ich allerdings bei der Lottoziehung auf die 6 Gewinnkugeln warte, dann kommt nie eine Kugel zweimal (warum?)
    Wieso habe ich bei 32 Spielkarten nie zweimal hintereinander das Herz-As?
    Hint: Spieler im Clan durchmischen (a.k.a. nach Zufall sortieren), die Reihenfolge ergibt dann die zugewiesene Nummer.

    Oder das Beispiel übertragen auf ein Kartenspiel: Karten mischen, dann auf jede Karte fortlaufend eine Nummer schreiben.

    BTW: die Logik hat nichts mit Noob oder nicht Noob zu tun. Der Logik begegnest du jeden Tag, wenn du entscheidest, ob vor dem Kaffeetrinken den Mund öffnest, beim Treppensteigen den Fuß hebst, oder vor dem Mausklick den Computer einschaltest.