Autor Beitrag
itchaas
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Mo 22.10.12 13:47 
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?

ausblenden 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(146);
                
                while (!(lotto2.Contains(check))) //Was passiert wenn Element bereits im Array?
                {
                    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:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
if (!(lotto2.Contains(check)))
                {
                    lotto2[i] = check;
                    Console.Write(" " + lotto2[i]);
                }

                 else 
                {i--;}
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 22.10.12 14:31 
Moin und :welcome: in der EE!

user profile iconitchaas hat folgendes geschrieben Zum zitierten Posting springen:
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

_________________
There are 10 types of people - those who understand binary and those who don´t.
itchaas Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Mo 22.10.12 19:15 
Hallo,

habe vergessen zu erwähnen unser Lehrkörper hat uns:
ausblenden C#-Quelltext
1:
2:
Random rand = new Random();
check = rand.Next(146);

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 user profile iconNarses: C#-Tags hinzugefügt
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4701
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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.

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: 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:
ausblenden C#-Quelltext
1:
2:
var numbers = Enumerable.Range(1, ballcount).ToList();
List<int> lotto2 = new List<int>();
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4701
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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).