Entwickler-Ecke
C# - Die Sprache - Problem bei mit Binary Search in Arrays
vatanseven - Mi 04.03.09 22:06
Titel: Problem bei mit Binary Search in Arrays
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:
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]; Random zufallszahl = new Random(); for (int i = 0 ; i < 7; i++) { bool x = true; gezogenezahl[i] = zufallszahl.Next(1, 49); do { int MyPos; MyPos = Array.BinarySearch(gezogenezahl , gezogenezahl[i]); if(MyPos >= 0 ) { gezogenezahl[i] = zufallszahl.Next(1, 49); ! } else { x = false; } } while( x == true); if (i == 6) { Console.Write("Die Zusatzzahl lautet :" + gezogenezahl[i]); } else Console.WriteLine(" Zahl " + (i+1) + "ist : " + gezogenezahl[i]);
} Console.ReadKey();
} } } |
Moderiert von
Christian S.: C#-Tags hinzugefügt
Christian S. - 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 [
http://www.entwickler-ecke.de/richtlinien.html]:
| 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

oder

klicken und den Titel ändern. Danke Dir!
Viele Grüße,
Christian S.
Ralf Jansen - 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
C#-Quelltext
1: 2: 3:
| gezogenezahl[i] = zufallszahl.Next(1, 49); ... 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 - Mi 04.03.09 22:47
Ralf Jansen hat folgendes geschrieben : |
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 - 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 - 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.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 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!