mstel Geschrieben 5. Dezember 2012 Geschrieben 5. Dezember 2012 Hallo, wie in meinem Betreff kurz erwähnt stecke ich in der Programmierung eines kleinen Programmes fest. Ich bin in der ausbildung aus FIAE aber habe erst meinen Sek II abschluss und bin 17 jahre alt und hatte vorher keinerlei erfahrung im Programmieren. Seid dem August bin ich am programmieren und die Basic's gehen auch schon aber jetzt ist meine aufgabe : Ich soll in einem Array 10 Zufallszahlen generieren und der größe nach sortieren. Das generieren funktioniert auch schon. allerdings muss ich nun überprüfen ob im array eine zahl doppelt generiert wurde und stattdessen eine neue generieren. aber ich habe keine ahnung wie ich die array elemente miteinander vergleiche, würde 1 mit 2,3,4 etc vergleichen dann 2 mit 1,3,4 etc aber da das programm erweiterbar sein soll ist dies eine lösung mit der der arbeitgeber nicht einverstanden ist, daher nun meine frage : Wie kann ich verallgemeinert in einer schleife die array elemente aufeinander überprüfen ? mein code sieht momentan so aus : private void zahlen_generieren() { Random Rnd = new Random(); // initialisiert die Zufallsklasse long[] lngVar = new long[10]; int indexwerte = lngVar.Length; for (int zaehlwert = 0; zaehlwert < 10; zaehlwert++) { lngVar[zaehlwert] = Rnd.Next(1, 100); } generatedLabel1.Text = lngVar[0].ToString(); generatedLabel2.Text = lngVar[1].ToString(); generatedLabel3.Text = lngVar[2].ToString(); generatedLabel4.Text = lngVar[3].ToString(); generatedLabel5.Text = lngVar[4].ToString(); generatedLabel6.Text = lngVar[5].ToString(); generatedLabel7.Text = lngVar[6].ToString(); generatedLabel8.Text = lngVar[7].ToString(); generatedLabel9.Text = lngVar[8].ToString(); generatedLabel10.Text = lngVar[9].ToString(); danke für hilfe, gruß mstel Zitieren
Klotzkopp Geschrieben 5. Dezember 2012 Geschrieben 5. Dezember 2012 Wie kann ich verallgemeinert in einer schleife die array elemente aufeinander überprüfen ?Du schreibst es doch schon selbst: In einer Schleife. Vielleicht ist es für dich gedanklich einfacher, wenn du den neuen Wert nicht direkt im Array ablegst, sondern zunächst in einer zusätzlichen Variablen, die du mit jedem existierenden Array-Element vergleichst. Zitieren
Tom87 Geschrieben 5. Dezember 2012 Geschrieben 5. Dezember 2012 Hallo mstel, für solche Fragen ist eigentlich das Unterforum Programmieren/.net da. Wenn es nicht unbedingt Arrays sein müssen, würde ich dir empfehlen, mal nach Collections zu suchen . Gruß Tom Zitieren
lilith2k3 Geschrieben 5. Dezember 2012 Geschrieben 5. Dezember 2012 (bearbeitet) Du schreibst es doch schon selbst: In einer Schleife. Vielleicht ist es für dich gedanklich einfacher, wenn du den neuen Wert nicht direkt im Array ablegst, sondern zunächst in einer zusätzlichen Variablen, die du mit jedem existierenden Array-Element vergleichst. Das kannst Du bequem erweitern: Wert in einer Variablen ablegen und anschließend http://msdn.microsoft.com/de-de/library/d9hy2xwa(v=vs.80).aspx benutzen Bearbeitet 5. Dezember 2012 von lilith2k3 Zitieren
mstel Geschrieben 5. Dezember 2012 Autor Geschrieben 5. Dezember 2012 dankeschön das klingt schonmal gut die methode .contain hab ich noch nicht gekannt Zitieren
Gurki Geschrieben 5. Dezember 2012 Geschrieben 5. Dezember 2012 Contains ist auch nur für Zeichenketten (Strings) bestimmt. Ich würde es einfach so machen: variable; for (int zaehlwert = 0; zaehlwert < 10; zaehlwert++) { variable = Rnd.Next(1, 100); foreach (var item in ingVar) { if (item != variable) { lngVar[zaehlwert] = variable; } } } Habe jetzt nicht getestet ob meine Logik da hinkt... :old Zitieren
mstel Geschrieben 5. Dezember 2012 Autor Geschrieben 5. Dezember 2012 du hast mein problem schon verstanden, ich habe keine strings.. die funktion ist leider nicht verwendbar.. ich habe jetzt eine methode gebaut : private void zahlen_generieren() { Random Rnd = new Random(); long[] lngVar = new long[10]; int indexwerte = lngVar.Length; for (int zaehlwert = 0; zaehlwert < indexwerte ; zaehlwert ++) { lngVar[zaehlwert] = Rnd.Next(1, 15); zaehlwert = zaehlwert + 1; auf_gleiche_werte_ueberpruefen(lngVar, indexwerte, zaehlwert); } } private bool auf_gleiche_werte_ueberpruefen(long[] array, int indexer, int zaehler) { bool zahlen_einmalig = true; return zahlen_einmalig; } allerdings brauche ich jetzt noch eine schleife die überprüft ob eine zahl mehr als einmal vorkam und ich weiß nicht wie ich die Bedingungen setze beziehungsweise welche verarbeitungen sinnvoll sind.. einen wert auf alle folgenden zu überprüfen stellt kein so großes problem dar, aber jeden wert untereinander zu überprüfen ist wirklich schwer.. ich komme nicht so ganz voran. aber großes dankeschön für die antworten. Zitieren
Klotzkopp Geschrieben 5. Dezember 2012 Geschrieben 5. Dezember 2012 einen wert auf alle folgenden zu überprüfen stellt kein so großes problem dar, aber jeden wert untereinander zu überprüfen ist wirklich schwer.. Vor allem ist es unnötig. Du brauchst nicht jeden gegen jeden zu prüfen, wenn du die Information verwendest, dass nur die zuletzt hinzugekommene Zahl überhaupt für ein Duplikat in Frage kommt. Zitieren
mstel Geschrieben 5. Dezember 2012 Autor Geschrieben 5. Dezember 2012 kommt sie ja nicht, angenommen es wurden schon 5 werte generiert. dann muss ich den 6. wert nicht nur auf den 5. überprüfen sondern auch auf 4,3,2 und 1. und das programm muss erweiterbar sein ich kann mich nicht auf 10 einigen, es muss so allgemein gültig sein das ich einfach aus der 10 eine 20 machen könnte und dort wieder kein wert doppelt vorkommt.. Zitieren
Goulasz Geschrieben 5. Dezember 2012 Geschrieben 5. Dezember 2012 (bearbeitet) Muss es nen Array sein? Ich persönlich nutze viel lieber List<T>. Grade was das nachträgliche Hinzufügen von Objekten angeht, ist das doch "etwas" komfortabler. Da gibt es übrigens auch ein "Contains". Sonst kann man, wie Klotzkopp glaube ich schon andeutete, vor jedem Array.Add(Element) ein if(!Array.Contains(Element)) zur Prüfung laufen lassen und gut is. Bearbeitet 5. Dezember 2012 von Goulasz Klammer vergessen, grober Unfug! Zitieren
Klotzkopp Geschrieben 5. Dezember 2012 Geschrieben 5. Dezember 2012 kommt sie ja nicht, angenommen es wurden schon 5 werte generiert. dann muss ich den 6. wert nicht nur auf den 5. überprüfen sondern auch auf 4,3,2 und 1.Eben. Du musst aber beispielsweise nicht prüfen, ob 4 und die 2 gleich sind. Genau das scheint aber die Absicht deiner Funktion auf_gleiche_werte_ueberpruefen zu sein. Zitieren
mstel Geschrieben 5. Dezember 2012 Autor Geschrieben 5. Dezember 2012 @Klotzkopp : 4 und 2 dürfen aber auch nicht identisch sein. Zitieren
Klotzkopp Geschrieben 5. Dezember 2012 Geschrieben 5. Dezember 2012 @Klotzkopp : 4 und 2 dürfen aber auch nicht identisch sein.Wenn du die 6 einfügst, können 2 und 4 nicht identisch sein. Das hast du doch bereits beim Einfügen von 4 geprüft. Zitieren
mstel Geschrieben 5. Dezember 2012 Autor Geschrieben 5. Dezember 2012 richtig.. aber ich verstehe nicht ganz wie ich einer schleife als bedingung und verarbeitung sagen kann, dass sie bei element [3] nur die 2 und die 1 überprüft und bei element [5] zusätzlich noch 3 und 4.. mit der obig genannten foreach schleife komme ich auch zu keinem ergebnis.. private void zahlen_generieren() { Random Rnd = new Random(); long[] lngVar = new long[10]; int indexwerte = lngVar.Length; int variable; for (int zaehlwert = 0; zaehlwert < indexwerte; zaehlwert++) { variable = Rnd.Next(1, 15); foreach (var item in lngVar) { if (item != variable) { lngVar[zaehlwert] = variable; } } } anschließend habe ich nur die ausgabe, aber die werte die generiert werden kommen dennoch mehrmals vor.. Zitieren
mstel Geschrieben 5. Dezember 2012 Autor Geschrieben 5. Dezember 2012 leider ja, ist in diesem fall so gewünscht.. Zitieren
Klotzkopp Geschrieben 5. Dezember 2012 Geschrieben 5. Dezember 2012 mit der obig genannten foreach schleife komme ich auch zu keinem ergebnis..Das ist ja auch Unsinn, was du da machst. Überleg dir mal folgendes genau: - Wann kannst du sagen: "Der neue Wert ist schon drin", und wie musst du darauf reagieren? - Wann kannst du sagen: "Der neue Wert ist noch nicht drin", und wie musst du darauf reagieren? Zitieren
lilith2k3 Geschrieben 5. Dezember 2012 Geschrieben 5. Dezember 2012 dankeschön das klingt schonmal gut die methode .contain hab ich noch nicht gekannt Da hat sich was überschnitten. Ich habe den Link erneuert, weil ich mich in der Methode geirrt habe :] http://msdn.microsoft.com/de-de/library/d9hy2xwa(v=vs.80).aspx <- war der neue Link. Du hast den Thread wohl schon gelesen, bevor ich aktualisiert habe *g* C# Array.Find Method Zitieren
mstel Geschrieben 5. Dezember 2012 Autor Geschrieben 5. Dezember 2012 Das ist mein aktueller stand.. ich finde den fehler aber nicht der debugger haut mir mal keine fehlermeldungen mehr raus allerdings wird momentan noch in jeden wert null geschrieben.. private void zahlen_generieren() { Random Rnd = new Random(); long[] lngVar = new long[3]; int indexwerte = lngVar.Length; bool true_or_false = false; for (int zaehlwert = 0; zaehlwert < indexwerte; zaehlwert++) { int neuer_Wert = Rnd.Next(1, 15); true_or_false = auf_gleiche_werte_ueberpruefen(lngVar, zaehlwert, neuer_Wert); } generatedLabel1.Text = lngVar[0].ToString(); generatedLabel2.Text = lngVar[1].ToString(); generatedLabel3.Text = lngVar[2].ToString(); } private bool auf_gleiche_werte_ueberpruefen(long[] array, int indexPosition, int generierter_Wert) { bool zahlen_einmalig = false; if (indexPosition > 0) { for (int zaehler = 0; zaehler != array.Length ; zaehler ++) { if ( generierter_Wert == array[zaehler] ) { zahlen_einmalig = true; } } } return zahlen_einmalig; } Zitieren
mstel Geschrieben 5. Dezember 2012 Autor Geschrieben 5. Dezember 2012 okay habe die lösung endlich gefunden.. der thread kann von mir aus geschlossen werden oder für andere user die selbige probleme haben weiterverwendet..( sortierfunktion noch nicht eingebaut, lediglich das generieren und abfangen von mehrfachem auftreten der generierten zahlen ) der programmcode lautet wie folgt : namespace Sortieren_Von_Zahlen { public partial class Form1 : Form { long[] lngVar = new long[10]; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } private void buttonGenerate_Click(object sender, EventArgs e) { zahlen_generieren(); } private void buttonSort_Click(object sender, EventArgs e) { ausgabe_Sorted(lngVar); } private void zahlen_generieren() { Random Rnd = new Random(); int indexwerte = lngVar.Length; bool true_or_false = false; for (int zaehlwert = 0; zaehlwert < indexwerte; zaehlwert++) { int neuer_Wert = Rnd.Next(1, 15); true_or_false = auf_gleiche_werte_ueberpruefen(lngVar, zaehlwert, neuer_Wert); while (true_or_false == true) { neuer_Wert = Rnd.Next(1, 15); true_or_false = auf_gleiche_werte_ueberpruefen(lngVar, zaehlwert, neuer_Wert); } lngVar[zaehlwert] = neuer_Wert; } ausgabe_Generated(lngVar); } private bool auf_gleiche_werte_ueberpruefen(long[] array, int indexPosition, int generierter_Wert) { bool zahlen_einmalig = false; if (indexPosition > 0) { for (int zaehler = 0; zaehler != array.Length ; zaehler ++) { if ( generierter_Wert == array[zaehler] ) { zahlen_einmalig = true; } } } return zahlen_einmalig; } private void ausgabe_Generated(long[] test) { generatedLabel1.Text = test[0].ToString(); generatedLabel2.Text = test[1].ToString(); generatedLabel3.Text = test[2].ToString(); generatedLabel4.Text = test[3].ToString(); generatedLabel5.Text = test[4].ToString(); generatedLabel6.Text = test[5].ToString(); generatedLabel7.Text = test[6].ToString(); generatedLabel8.Text = test[7].ToString(); generatedLabel9.Text = test[8].ToString(); generatedLabel10.Text = test[9].ToString(); } private void ausgabe_Sorted(long[] test2) { sortedLabel1.Text = test2[0].ToString(); sortedLabel2.Text = test2[1].ToString(); sortedLabel3.Text = test2[2].ToString(); sortedLabel4.Text = test2[3].ToString(); sortedLabel5.Text = test2[4].ToString(); sortedLabel6.Text = test2[5].ToString(); sortedLabel7.Text = test2[6].ToString(); sortedLabel8.Text = test2[7].ToString(); sortedLabel9.Text = test2[8].ToString(); sortedLabel10.Text = test2[9].ToString(); } } } danke für alle helfenden Zitieren
SilentDemise Geschrieben 5. Dezember 2012 Geschrieben 5. Dezember 2012 unabhängig davon solltest du dich vielleicht mal mit den Coding Style Guidelines von C# vertraut machen. Der Code liest sich fürchterlich :-/ Zitieren
mstel Geschrieben 5. Dezember 2012 Autor Geschrieben 5. Dezember 2012 tut mir leid, wie bereits erwähnt bin ich blutiger anfänger und freu mich in erster linie über die funktionalität. aber danke, ich werde den ratschlag befolgen und mich nebenbei damit befassen.. Zitieren
SilentDemise Geschrieben 5. Dezember 2012 Geschrieben 5. Dezember 2012 hey mstel, gerade deswegen solltest du dich damit befassen. Das was man sich am anfang falsch angewöhnt, wird man später nur schwer wieder los ;-) Außerdem würde ich dir für die zukunft die Code Tags hier im Forum empfehlen :-) Zitieren
Gurki Geschrieben 6. Dezember 2012 Geschrieben 6. Dezember 2012 So aus Langeweile habe ich das Ganze jetzt auch mal gemacht :beagolisc: class Program { static Random rnd = new Random(); static void Main(string[] args) { int[] myArray = new int[10]; int rndCount = 0; for (int i = 0; i < myArray.Length; i++) { FillNextItem(myArray, i); Console.WriteLine(myArray[i]); } Console.ReadLine(); } private static bool FindContains(int[] myArray, int rndCound) { foreach (int item in myArray) { if (item == rndCound) { return true; } } return false; } private static void FillNextItem(int[] myArray, int i) { int rndCount = 0; rndCount = rnd.Next(1, 11); if (FindContains(myArray, rndCount)) { FillNextItem(myArray, i); } else { myArray[i] = rndCount; } } } Zitieren
Adrian3591 Geschrieben 6. Dezember 2012 Geschrieben 6. Dezember 2012 kannst du einfach machen mit Random rnd = new Random(); int[] zahlen = new int[10]; for (int i = 0; i < 10; i++) { int next = rnd.Next(1, 100); foreach (int zahl in zahlen) { if (zahl == next) { i--; return; } } zahlen = next; Console.WriteLine(zahlen.ToString()); } Console.ReadKey(); Damit gehst du sicher das immer ein neuer Wert eingetragen wird und wenn der Wert im Array vorhanden ist wird der zähler zurückgesetzt Zitieren
Gurki Geschrieben 6. Dezember 2012 Geschrieben 6. Dezember 2012 Damit springt er dann aber bei einer doppelten Zahl aus der Schleife raus und man erhält keine 10 Zahlen im Array. Mein Code funktioniert Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.