Autor Beitrag
vatanseven
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mi 04.03.09 22:06 
Guten Abend,
da ich in der Schule C# lerne und diese auch lernen möchte , bin ich sehr interessiert daran meine Fehler zu finden.
Jedoch bin ich nun an meinen Grenzen.
Wir sind bei Methoden und Arrays zurzeit.
Der Quellcode soll bezwecken, dass Lottozahlengezogen werden und die gezogenen Zahlen sollen in Arrays gespeichert werden.
Schon gezogenen Zahlen sollen nicht in dem Array gespeichert werden.
Das Problem ist, dass der nach drei Ziehungen einfach aufhört und dann aus der WhileSchleife nicht mehr rauskommt...
Ich hab auch versucht in der If Anweisung , wo die Zufallszahl neu gezogen wird das MyPos in -1 zu deklarieren jedoch ohne Erfolg.


Danke

Quellcode:

ausblenden volle Höhe 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:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Lottogenerator_mit_Arrays
{
    class Program
    {
        static void Main(string[] args)
        {
            
            int[] gezogenezahl = new int[7];  // Array definieren mit 7 Feldern
            Random zufallszahl = new Random();  // Zufallszahlengenerator definieren 
            for (int i = 0 ; i < 7; i++)        // For Schleife mit Abbruchbedingung 7 (Lotto Zahlen 6 + ZZ 1)
            {
                bool x = true;                  
                
                gezogenezahl[i] = zufallszahl.Next(149);  
//Array Feld i mit Zufallszahl zwischen 1 und 49 belegen
                do
                    {
                        int MyPos;
                        MyPos =  Array.BinarySearch(gezogenezahl , gezogenezahl[i]);
                  // Sucht ob "neue" gezogene Zahl in Array drin ist
                        if(MyPos >= 0 ) 
// Wenn Ja bekommt MyPos den Wert der Position der gezognen Zahl in dem Arrray4
                    {
                        gezogenezahl[i] = zufallszahl.Next(149); // Var[i} bekommt neuen Wert
                                              !                          
                    }
                    else
                    {
                        x = false;
                    }
                    
                }
                while( x == true); //Abbruchbedinung

                if (i == 6// Zusatzzahl !!
                {
                    Console.Write("Die Zusatzzahl lautet :" + gezogenezahl[i]);
                }
                else // Lottozahlen von Eins bis Sechs !! I+1 weil I bei 0 anfängt
                    Console.WriteLine(" Zahl " + (i+1) + "ist : " + gezogenezahl[i]);

            }
            Console.ReadKey();

        }
    }
}


Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt


Zuletzt bearbeitet von vatanseven am Do 05.03.09 11:32, insgesamt 1-mal bearbeitet
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mi 04.03.09 22:36 
Hallo und :welcome:,

bitte ändere den Titel des Topics, da er wenig über das eigentlich Thema verrät. Hier der entsprechende Absatz aus den Richtlinien:

1.2 Beiträge:
Bitte formuliere den Betreff Deiner Beiträge so, dass andere Mitglieder anhand dieser bereits das eigentliche Thema festmachen können. Beiträge wie etwa "Eine Anfängerfrage" oder "Weiß jemand, wie das geht?" lassen den Leser im Unklaren darüber, was das Thema der Diskussion ist.[...]


Einfach oben bei Deinem ersten Beitrag auf user defined image oder user defined image klicken und den Titel ändern. Danke Dir!

Viele Grüße,
Christian S.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 04.03.09 22:42 
Du solltest nochmal überdenken bzw. nachlesen was BinarySearch macht.
Wenn ihr binäres Suchen schon durchgenommen habt solltest du Wissen das das nur bei einer sortierten Liste funktionieren kann.
Und wenn du dich nochmal dran erinnerst wie das geht sollte dir auch schnell klar werden warum sich BinarySearch anders verhalt sobald das mittlerste Element in der Liste gesetzt wird. Du solltest besser eine der Array.Find() Methoden benutzen.

2.tens du versuchst mit BinarySearch eine Zahl zufinden die du aber immer zuvor schon selbst hineingeschrieben hast.
Also

ausblenden C#-Quelltext
1:
2:
3:
gezogenezahl[i] = zufallszahl.Next(149);
...
MyPos = Array.BinarySearch(gezogenezahl, gezogenezahl[i]);


wenn BinarySearch so funktioniert hätte wie von dir erhofft hätte BinarySearch immer die Zahl gefunden.
Du solltest also eine Zahl würfeln, merken, prüfen ob sie in der Liste ist und wenn nicht dann erst den Wert zu der Liste hinzufügen.


Und nur weil es gesagt sein sollte. Anstatt Array wäre ein List<int> geeigneter. Array solltest du hier nur benutzen weil es euer aktueller Lernstoff ist.
Es gibt (fast) immer bessere Alternativen zu Arrays.
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mi 04.03.09 22:47 
user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:
Und nur weil es gesagt sein sollte. Anstatt Array wäre ein List<int> geeigneter. Array solltest du hier nur benutzen weil es euer aktueller Lernstoff ist.
Es gibt (fast) immer bessere Alternativen zu Arrays.
Wenn man 7 Zahlen zieht, ist nicht zu erwarten, dass auf einmal 8 herauskommen :nixweiss: . Es gibt in diesem Fall wirklich nichts, was gegen Arrays spricht.

_________________
>λ=
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 04.03.09 23:01 
Zitat:
Wenn man 7 Zahlen zieht, ist nicht zu erwarten, dass auf einmal 8 herauskommen :nixweiss: . Es gibt in diesem Fall wirklich nichts, was gegen Arrays spricht.

Z.B. Das bevor alle 7 Zahlen gezogen sind schon 7 Zahlen im Array sind. Und prompt hat sich vatanseven von den zusätzlichen 0'en tölpeln lassen(unter anderem).
Wenn man genau weiß was man tut gehen natürlich auch Arrays, in nicht allzuferner Vergangenheit war das auch so ziemlich die einzige Möglichkeit und da hat man auch erfolgreich programmiert. Ich behaupte jetzt aber einfach mal das eine generische Liste da weniger fehleranfällig ist auch in so banalen Anwendungsfällen wie diesem.
vatanseven Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Do 05.03.09 17:14 
Vielen Dank für die zahlreichen antworten.
Jedoch hat es letztentlich nicht funktioniert und resigniered beschloss ich meine eigene "Funktion" dafür zu schreiben.
Ging dann auch alles gut mit ner zweiten For Schleife die jedes Array Feld durchgeht ob der Inhalt schonma gezogen wurde.