Array mischen
- VB.NET
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von foxm2k.
-
-
-
-
-
-
-
-
-
Hi Eisvogel,
so wie MAAN10 es geschrieben hat ist es denke ich am einfachsten, nochmal bissel ausfürlicher:
sagen wir du hast 2 Array einmal strVokabel(100) und einmal strLösung(100)
dann erzeugst du eine zufallszahl zwischen 1 und 100 und fragst dann mit deinem Programm den Benutzer nach der vokabel strVokabel(zufallszahl)
du musst die Arrays ja nicht von 1-100 in der Reihenfolge abfragen.
dann könntest du in ein weiteres Array speichern, welche zahlen schon gefragt wurden und gegebenenfalls neu Würfeln..
MfG Sepp -
Unter den Suchbegriffen hättest du ne Menge mehr gefunden, z.B. so etwas:
f0x -
-
Also 2 Arrays is unsinnig, ich würde dir da auch zu einem Array mit eigener Klasse raten.
Dann halt die Liste füllen mit
und so weiter. Später machst du ein weiteres Array vom selben Datentyp und dann eine Do While Schleife wo die Einträge des ersten, gefüllten Arrays ausliest via Randomize, als Grenze eben von Minimal bis Länge des Arrays. Sobald ein Element Ausgewählt wurde wird dieses Element aus dem bestehenden gefüllten Array in das Array gepackt, wo sie gemsicht sein sollen, im gleichen Zug wird das gewählte Element gelöscht, damit wird das eine Array immer kleiner bis am ende nur noch 1 eintrag drin ist.
So würde ich es machen. -
So ich habs endlich geschafft
Quellcode
- Private Sub Wörter_mischen()
- Dim Zufall As New Random
- Dim Zahl1 As Double
- Dim Zahl2 As Double
- Dim Wort1 As String
- Dim Wort2 As String
- 'Erstellt 2 zufällige Zahlen in der größe des Arrays
- Zahl1 = Zufall.Next(0, Wörter1.Length)
- Zahl2 = Zufall.Next(0, Wörter1.Length)
- 'Vertauscht 2 Wörter des 1. Arrays
- Wort1 = Wörter1(Zahl1)
- Wort2 = Wörter1(Zahl2)
- Wörter1(Zahl1) = Wort2
- Wörter1(Zahl2) = Wort1
- 'Vertauscht 2 Wörter des 2. Arrays
- Wort1 = Wörter2(Zahl1)
- Wort2 = Wörter2(Zahl2)
- Wörter2(Zahl1) = Wort2
- Wörter2(Zahl2) = Wort1
- End Sub
Dieser code micht mir die beiden Arrays "Wörter1" und "Wörter2".
Beide werden genau gleich gemischt, so dass die übertetzung immernoch stimmt
Jedoch habe ich ein Problem mit der umsetzung in meinem Programm
Ich frage die Funktion über eine While Schleife ab, so dass ich eintellen kann wie oft die Wörter gemischt werden sollen:
Wenn ich dabei die MsgBox weglasse funktioniert das ganze irgendwie net ... der Sub Mischen wird zwar ausgeführt, mischt auch die Wörter, aber sobald die While Schleife zu Ende ist, sind die wörter wieder in der Grundreihenfolge ...
Das ist irgendwie voll seltsam ... kann mir jemand helfen?
Danke für eure Hilfe -
-
Danke für deine Antwort, jedoch beantwortet das nicht meine Frage.
Was du mit Copy&Paste meinst verstehe ich nicht und wegen den mehrmaligen mischen, wenn du dir den Code genau angeschaut hättest, hättest du bemerkt, dass bei dem Mischvorgang immer nur 2 Wörter vertauscht werden, also der rest bleibt gleich, das wäre eine ziemlich uneffektive art des mischens.
Und sowas von einem SuperMod ... -
Na, mal ganz ruhig bleiben. Ich wollte dir damit aufzeigen daß du in der Logik falsch unterwegs bist. Du verteilst deine Mischlogik auf zwei Programmteile, was ziemlich schlechter Stil ist. Außerdem stellt sich mir dabei die Frage wie du ganz allgemein bestimmst wie oft du vertauschen willst, bis du davon ausgehst daß du die gewünschte Entropie in deinem Array erreicht hast. Daher die Frage ob du glaubst daß du mit mehrmaligem Mischen zufälliger unterwegs zu sein. Da du offenbar mehr prozedural als objektorientiert denkst hab ich dir vorgeschlagen das ganze in eine sub in ein Modul auszulagern. Dazu hab ich dir schon eine Möglichkeit gepostet (die du anscheinend überlesen hast). Zumindest hab ich nicht gesehen daß du dich damit auseinander gesetzt hast. Trotz all dieser Unzulänglichkeiten die ich erkenne, versuche ich auf einer sachlichen Ebene zu antworten und möchte dich um selbiges bitten. Spar dir bitte solche Kommentare in Zukunft. Du solltest nicht vergessen daß du es bist der Fragen hat und Hilfe sucht, daher solltest vor allem _du_ freundlich bleiben und versuchen zu verstehen was man dir antwortet.
Grüße,
f0x -
Sry, ich habe deine Beitrag schon gelesen, jedoch nicht verstanden
Das es schlehter Stile ist, die Mischlogik auf 2 Programmteile zu verteilen sollte ja eigentlich nichts am Ergebnis ändern.
Ich habe jetzt die While schleife in den mischen Sub mit hinein gepackt und nun geht es.
falls jemand weiß warum es dovor niht ging wäre ich sehr dankbar
Die Mischvorgänge habe ich jetzt auch abhängig von der Anzahl der Wörter gemacht -
Die Empfehlung für die Verwendung des Typs random lautet: Einmal instanzieren, dann mit .next jeweils verwenden. Was du gemacht hast war folgendes: Du hast in einer schleife mit new random jeweils sehr schnell hintereinander neue Objekte instanziert (Aufgrund deiner Verkettung der zwei Teile). Es ist bekannt daß dies aufgrund der Art und Weise wie der Seed ermittelt wird dazu führen kann daß die produzierten Zahlen nicht mehr zufällig sind sondern sich wiederholen. Je nachdem wie du die Schleife also jetzt in deine Mischlogik integriert hast, ist das Ergebnis eben gerade _nicht_ dasselbe wie in dem Beispiel daß du davor gepostet hast. Und das hast du ja auch schon selbst bemerkt.
f0x
-
Ähnliche Themen
-
Stellen einer Zahl "randomisieren"
Leviathan_ - - Sonstige Problemstellungen
-
2 Benutzer haben hier geschrieben
- Gast (17)
- gs93 (1)