
Ergebnis 1 bis 7 von 7
-
- 13.09.2012, 18:39
- #1
Hallo zusammen,
ich habe ein Frage bzgl. der random klasse in c#
und zwar erzeuge ich mit
Random Rnd = new Random();
int round = Rnd.Next(0, 151);
Das klapp alles wunderbar, aber ich möchte, dass bereits generierte Zahlen nicht noch einmal generiert werden.
Geht das mit dem von mir genutzten Code? Oder muss ich das ganze komplett anders regeln?
Vielen dank für eure Hilfe!
mfg
Tortuga
-
Gehöre zum Inventar
- 13.09.2012, 18:56
- #2
D.h. du möchstest Zahlen im Bereich von 0 bis 151 generieren aber jede der Zahlen soll nur einmal vorkommen bis du alle einmal hattest? Für einen einzelnen Durchlauf ist das nicht garantiert, bei einer gegen unendlich gehenden Zahl an generierten Werten sind sie jedoch alle gleich wahrscheinlich - auch wenn z.B. durchaus zweimal hintereinander eine 5 kommen könnte.
-
- 13.09.2012, 19:00
- #3
genau beim start der app sollen die zahlen jeweils einmal vorkommen, wenn die app aber wieder neu gestartet wird sollen alle zahlen wieder einmalig zur Verfügung stehen... und das halt immer und immer wieder.
momentan ist es so, dass die zahlen durchaus 2-3 mal hinter einander kommen oder 1, 1, 1, 2, 1, 2, 3, 40, ... und um das zu umgehen dachte ich evtl. gibt es ja eine mgl. jedes erzeugte zahl zu "sperren"...
-
Gehöre zum Inventar
- 13.09.2012, 19:21
- #4
Du könntest ein Boolean-Array nehmen mit 150 Stellen und immer wenn du eine Zahl generierst den entsprechenden Index im Array auf false setzen.
Also:
do {
int i = rnd.Next(0, 150);
}
while(!arr[i]);
arr[i] = false;
Mit der Schleife generierst du solange neue Zufallszahlen bis du eine hast, die noch nicht dran war. Dann markierst du sie als benutzt. Ist nicht die effizienteste Lösung aber sie funktioniert. Du solltest halt irgendwie auch mitzählen wieviele Zahlen du schon generiert hast. Nach 150 generierten Zahlen sind nämlich keine mehr übrig => das da oben würde zur Endlosschleife. Da wäre es dann wohl am besten alle wieder zu erlauben (also alle Felder im Array auf true zu setzen).
-
entwickelt Apps
- 13.09.2012, 19:42
- #5
Oder soetwas: https://gist.github.com/3ddcc2de0e219fa9044e
-
- 13.09.2012, 20:27
- #6
ahhh danke euch beiden!
eine ähnliche version des links habe ich jetzt verbaut...
ich speicher alle generierten zahlen zwischenzeitlich im storage und leere ihn wieder wenn ich zurück ins hauptmenü gehe um eine neue runde zu beginnen!
-
- 17.09.2012, 09:21
- #7
Ich würde hierfür überhaupt nicht die Random Klasse verwenden. Ich würde ein Array mit den Zahlen 1 - 150 erstellen und dieses "zufällig sortieren". Eine hinreichend zufällige Sortierung bekommst du z.b., indem du als Sortierkriterium jeweils eine Guid erzeugst.
Mit der kostenlosen PocketPC.ch App von meinem OMNIA7 aus geschrieben.
Nachtrag: hier ein Codebeispiel...
Code:class Program { static void Main(string[] args) { var randomSet = GenerateRandomSet(150); } private static List<int> GenerateRandomSet(int count) { // Initialisiere die Liste mit den Elementen, die enthalten sein sollen. var list = new List<int>(); for (int i = 0; i < count; i++) list.Add(i + 1); // Jetzt würfel alles durcheinander, indem wir nach // einem "zufälligen" Kriterium sortieren return list.OrderBy(zahl => Guid.NewGuid()).ToList(); } }
Ähnliche Themen
-
Musikplayer spielt plötzlich im Random-modus
Von sivadselim im Forum Apple iPhone 4/SAntworten: 4Letzter Beitrag: 30.08.2012, 23:15 -
Sound spielt scheinbar random
Von Gorkde im Forum HTC Desire HDAntworten: 1Letzter Beitrag: 24.12.2010, 09:28 -
Random SMS-Benachrichtigungston
Von flodrhv im Forum HTC HD2 AndroidAntworten: 0Letzter Beitrag: 24.11.2010, 10:20 -
Random notification Sounds
Von mezen im Forum Android AllgemeinAntworten: 0Letzter Beitrag: 30.09.2010, 16:49 -
[Script] Random Boot Animation
Von dremox im Forum Google Nexus One Root und ROMAntworten: 0Letzter Beitrag: 03.03.2010, 13:35
Pixel 10 Serie mit Problemen:...