Entwickler-Ecke
C# - Die Sprache - Array Bsp Lotto kleine Verständnisfrage
itchaas - Mo 22.10.12 13:47
Titel: Array Bsp Lotto kleine Verständnisfrage
Hallo,
habe ein kleines Beispiel geschrieben bei dem die Lottozahlen per Zufallsgenerator ausgegeben werden.
Da ich aber noch Anfänger bin habe ich 2 Fragen:
-) Ist das Beispiel so korrekt oder könnten sich Fehler ergeben
-) Bei der Überprüfung ob das Element bereits im Array ist - was passiert wenn es tatsächlich im Array ist?
Habe ich dann ein Problem oder was passiert dann?
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| class T1A7_Lotto { static void Main(string[] args) { int[] lotto2 = new int[7]; int check = 0;
Random rand = new Random();
for (int i = 0; i < lotto2.Length; i++) { check = rand.Next(1, 46); while (!(lotto2.Contains(check))) { lotto2[i] = check; } Console.Write(" "+lotto2[i]); } Console.WriteLine();
} } |
Danke!
* EDIT *
ok ich denke ich darf dass Ganze nicht mit while schreiben sondern if und ein else einfügen mit i--;
dann sollte es fehlerfrei ablaufen...
Soll heißen:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| if (!(lotto2.Contains(check))) { lotto2[i] = check; Console.Write(" " + lotto2[i]); }
else {i--;} |
Narses - Mo 22.10.12 14:31
Moin und :welcome: in der EE!
itchaas hat folgendes geschrieben : |
Bei der Überprüfung ob das Element bereits im Array ist |
Jetzt mal unabhängig vom Code (den habe ich mir gar nicht angesehen :oops:): du hast da ein Konzept-Problem, wenn du immer wieder Zufallszahlen aus dem vollen Bereich ziehst und nach Doppelten suchst :shock: so funktioniert Lotto ja auch gar nicht! :zwinker: Ansatz für "echtes Lotto": Nimm ein Array mit 49 Elementen und schreibe 1 bis 49 als Werte rein, dann die Reihenfolge der Elemente mischen und die ersten 6 resp. 7 Elemente "ziehen". :idea:
cu
Narses
itchaas - Mo 22.10.12 19:15
Hallo,
habe vergessen zu erwähnen unser Lehrkörper hat uns:
C#-Quelltext
1: 2:
| Random rand = new Random(); check = rand.Next(1, 46); |
als Lösungshinweis/Angabe vorgegeben.
Bei uns heißt es Lotto 6 aus 45 + Zusatzzahl.
Aber prinzipiell hätte ich mir als Lösung auch eher das Ganze so gedacht wie du meintest.
Ich hätte mittels eine for Schleife die Zahlen 1 -45 in ein Array geschrieben und dann so wie die Reverse Funktion ähnlich
alles gemixt und dann irgenwelche ausgelesen...
Wie heißt den so ne Mix Funktion?
Und ist es sinnvoll immer die gleichen Elemente auszugeben? z.B. 0-6 oder kann man auch diese Ausgabe varieren (sinn machts wahrscheinlich keinen...)...
Danke!
Moderiert von
Narses: C#-Tags hinzugefügt
Ralf Jansen - Mo 22.10.12 20:21
Ich würde eine Liste der möglichen Zahlen erstellen. Dann per Random den Index der aus der Liste zu nehmenden Zahl würfeln, diese dann aus der ursprünglichen Liste entfernen und in die eigentliche Lottozahlen-liste übernehmen. Das sollte dem tatsächlichen Lottozahlen-verfahren recht nahe kommen.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| var ballcount = 46; var numbers = Enumerable.Range(1, ballcount).ToList(); List<int> lotto2 = new List<int>();
Random rand = new Random();
while (lotto2.Count() < 7) { int index = rand.Next(1, ballcount); lotto2.Add(numbers[index]); numbers.Remove(index); ballcount--; } |
itchaas - Di 23.10.12 12:33
ok danke!
schön sowas zu sehen, mit meinem derzeitigen Wissenstand könnte ich das noch nicht...
aber trotzdem sehr interessant - was hier passiert check ich nicht ganz:
C#-Quelltext
1: 2:
| var numbers = Enumerable.Range(1, ballcount).ToList(); List<int> lotto2 = new List<int>(); |
Ralf Jansen - Di 23.10.12 12:52
Zitat: |
schön sowas zu sehen, mit meinem derzeitigen Wissenstand könnte ich das noch nicht... |
Darum habe ich vorher die Idee dahinter genannt. Die lässt sich natürlich mit anderen Sprachmitteln die dir geläufiger sind genauso gut umsetzen.
Zitat: |
aber trotzdem sehr interessant - was hier passiert check ich nicht ganz: |
Enumerable.Range liefert dir eine Liste von Werten(Hier 1 bis 46). Diese Liste ist erst mal nur aufzählbar/iterierbar (Enumerable halt) darum rufe ich noch ein ToList auf damit ich eine änderbare Liste erhalte. Wir wollen ja später gewürfelte Lottozahlen aus dieser Liste entfernen können. var ist einfach ein Platzhalter für einen konkreten Typ hier List<int> der sich aus der rechten Seite des Ausdrucks eindeutig ergibt. Ich war nur Schreibfaul und habe deswegen List<int> nicht hingeschrieben. lotto2 habe ich zu einer Liste gemacht weil es einfach unüblich ist mit Arrays zu arbeiten. Diese sollte man nur benutzen wenn man auch eine fixe Anzahl Werte hat die auch gleich zur Verfügung stehen. Hier bei einer Liste kann ich nun einfach die Länge abfragen wieviele Lottozahlen es schon gibt.
Ich fange also mit einer leeren Lotto2 Liste an und füge solange Lottozahlen an bis 7 erreicht sind. Bei einem Array mit fixer Länge müsste ich sonst über andere Wege rausfinden wieviele Lottozahlen den schon gewürfelt wurden (z.b über einen weitere Zahlvariable oder die Restmenge der noch verfügbaren Zahlen in ballcount oder ob an jeder Arrayposition eine gültige Lottozahl steht oder noch 0).
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!