NeverMyWorld Geplaatst: 4 december 2012 Rapport Geplaatst: 4 december 2012 Hoi, IK heb een vraag over het vullen van een Listbox in C# Het zit namelijk zo: Ik heb een listbox die gevuld moet worden met 15 random getallen als ik op de juiste button klik. Aangezien ik een beginner ben met C# zou ik niet weten hoe dit moet. Indien iemand mij kan laten zien hoe dit moet zou ik dit zeer op prijs stellen. Reageren
Rutger. Geplaatst: 4 december 2012 Rapport Geplaatst: 4 december 2012 (bewerkt) Hoi, Ik heb op dit moment niets bij de hand maar ik type dit even uit mijn hoofd: void Knop_Click(Object sender, EventArgs e) { int i = 0; var random = new Random(); while(i < 14) { int randomNumber = random.Next(1, 100000); listBox1.Items.Add(randomNumber.ToString()); i++; } } In deze code ga ik er vanuit dat: Je C#.NET gebruikt (aangezien je niet vermeld of je .NET vermeld, maar dat is vrij aannemelijk) Je button als naam 'Knop' heeft en dat je de Click-event al gedeclareerd hebt (In Visual Studio dubbelklikken op de knop en de code wordt automatisch aangemaakt) Je listbox de naam 'listBox1' heeft. Je random getallen wilt hebben tussen de 1 en de 5000000. (Kan je zelf aanpassen) Succes, laat maar horen of het gelukt is! Bewerkt: 4 december 2012 door ZaroX Reageren
NeverMyWorld Geplaatst: 4 december 2012 Auteur Rapport Geplaatst: 4 december 2012 (bewerkt) Hey bedankt man, het is gelukt. EDIT: Helaas ben ik nu met een bubblesort bezig, ik heb dus de twee listboxes gevuld met de waarden van 1 tot 1000. Wanneer ik dan op de knop klik moet de bubblesort worden uitgevoerd. Ik krijg helaas deze melding: InvalidArgument=Waarde van 14 is niet geldig voor index. Bewerkt: 4 december 2012 door GloriousDa7 Reageren
KillerZero86 Geplaatst: 4 december 2012 Rapport Geplaatst: 4 december 2012 Ik gok dat je voor een goed antwoord even een stukje uit je code moet plakken: het stuk waarin de fout zich vertoond. Reageren
NeverMyWorld Geplaatst: 4 december 2012 Auteur Rapport Geplaatst: 4 december 2012 (bewerkt) Ik gok dat je voor een goed antwoord even een stukje uit je code moet plakken: het stuk waarin de fout zich vertoond. private void BubbleSort(ListBox lstBox3) { int aantal = 0; bool sorted = false; string temp = ""; aantal = lstBox3.Items.Count - 1; while (sorted == false) { sorted = true; for (int teller = 0; teller < aantal; teller++) { if (string.Compare(lstBox1.Items[teller].ToString(), lstBox2.Items[teller + 1].ToString()) > 0) { sorted = false; temp = lstBox3.Items[teller].ToString(); lstBox1.Items[teller] = lstBox2.Items[teller + 1]; lstBox3.Items[teller + 1] = temp; } } } } private void btnBubbleSort_Click(object sender, EventArgs e) { lstBox3.Items.AddRange(lstBox1.Items); lstBox3.Items.AddRange(lstBox2.Items); BubbleSort(lstBox3); } private void btnFill1_Click(object sender, EventArgs e) { { int i = 0; var random = new Random(); while (i < 14) { int randomNumber = random.Next(1, 1000); lstBox1.Items.Add(randomNumber.ToString()); i++; } } } private void btnFill2_Click(object sender, EventArgs e) { { { int i = 0; var random = new Random(); while (i < 14) { int randomNumber = random.Next(1, 1000); lstBox2.Items.Add(randomNumber.ToString()); i++; } } Bewerkt: 4 december 2012 door GloriousDa7 Reageren
KillerZero86 Geplaatst: 4 december 2012 Rapport Geplaatst: 4 december 2012 En op welke regel precies vertoond zich de fout? Reageren
NeverMyWorld Geplaatst: 4 december 2012 Auteur Rapport Geplaatst: 4 december 2012 En op welke regel precies vertoond zich de fout? if (string.Compare(lstBox1.Items[teller].ToString(), lstBox2.Items[teller + 1].ToString()) > 0) Reageren
Hanneswasco Geplaatst: 4 december 2012 Rapport Geplaatst: 4 december 2012 Je voegt llstBox1 en lstBox2 toe aan lstBox3, waardoor de grootte van lstBox3 gelijk is aan die van lstBox1 + die van lstBox2. Hierna laat je je teller lopen tot de grootte van lstBox3, maar vraag je wel de positie op van lstBox1 en lstBox2 welke een veel kleinere grootte hebben. Als je in die regel waar de fout optreedt je lstBox1 en lstBox2 vervangt door lstBox3 zou de bubblesort volgens mij moeten werken. Dit zal je onder deze regel dan ook moeten veranderen uiteraard, dus in de methode 'Bubblesort' moet je enkel met lstBox3 werken. Het algoritme is trouwens nog niet geoptimaliseerd, je kan bijvoorbeeld de variabele aantal na elke iteratie in de while-lus met één verlagen, aangezien je het grootste element altijd op het einde plaatst. Dit zal niets aan de tijdscomplexiteit van het algoritme veranderen maar het zal wel sneller gaan (pas merkbaar bij lijstgroottes rond de 10 miljoen, maar goed ). Daarnaast kan je volgens mij de items beter casten naar integers en deze te 'comparen', anders zal het string comparison zijn en is 10 bijvoorbeeld kleiner dan 2, al hangt dit af van de comparator. Reageren
Sublime Geplaatst: 5 december 2012 Rapport Geplaatst: 5 december 2012 Het algoritme is trouwens nog niet geoptimaliseerd, je kan bijvoorbeeld de variabele aantal na elke iteratie in de while-lus met één verlagen, aangezien je het grootste element altijd op het einde plaatst. Dit zal niets aan de tijdscomplexiteit van het algoritme veranderen maar het zal wel sneller gaan (pas merkbaar bij lijstgroottes rond de 10 miljoen, maar goed ). Ik snap de opmerking niet? Bedoel je dat na elke comparable wisseling je de volgende loop één loop minder hoef te lopen? Dat is niet waar aangezien Bubblesort alleen 2 getallen naast elkaar verwisselt en niet het getal dat lager is zover mogelijk achterin zet. En Bubblesort is inderdaad niet het meest efficiënte . Ik neem aan dat dit een schoolopdracht is ofzo? Als je met veel getallen gaat werken zou je ook nog threads kunnen gebruiken. Reageren
Hanneswasco Geplaatst: 5 december 2012 Rapport Geplaatst: 5 december 2012 Ik snap de opmerking niet? Bedoel je dat na elke comparable wisseling je de volgende loop één loop minder hoef te lopen? Dat is niet waar aangezien Bubblesort alleen 2 getallen naast elkaar verwisselt en niet het getal dat lager is zover mogelijk achterin zet. Niet na elke wisseling, maar na elke reeks van wisselingen in de for lus. Dus de verlaging van aantal zou moeten gebeuren na de for lus, maar nog binnen de while lus. Dan zal het grootste getal namelijk achteraan gezet zijn, en kan je dus verder werken met de lijst, verminderd met het laatste element. Maar goed, ik wil de TS nu niet verwarren, dus je negeert deze opmerking misschien beter. Reageren
Sublime Geplaatst: 5 december 2012 Rapport Geplaatst: 5 december 2012 Ahja op zon manier, true story Reageren
NeverMyWorld Geplaatst: 6 december 2012 Auteur Rapport Geplaatst: 6 december 2012 Nu komt er een nieuwe foutmelding sorted = false; temp = lstBox3.Items[teller].ToString(); lstBox2.Items[teller] = lstBox3.Items[teller + 1]; lstBox3.Items[teller + 1] = temp; InvalidArgument=Waarde van 14 is niet geldig voor index. Iemand zei me dat het misschien met een for loop opgelost kon worden, iemand een idee? Reageren
Hanneswasco Geplaatst: 6 december 2012 Rapport Geplaatst: 6 december 2012 Je moet alle listboxen in de if-conditie veranderen naar lstBox3 he, lees mijn uitleg nog eens goed door en als iets niet duidelijk is, vraag dan gerust door. Het belangrijkste is nog altijd dat je snapt waarom de fout er is, en niet dat wij je de oplossing geven en je die gewoon overneemt. Het stukje code vervangen door onderstaand stukje zou het, volgens mij, moeten oplossen. sorted = false; temp = lstBox3.Items[teller].ToString(); lstBox3.Items[teller] = lstBox3.Items[teller + 1]; lstBox3.Items[teller + 1] = temp; Ik snap trouwens ook niet goed waarom je .ToString() doet, maar ik heb nog nooit in C# gewerkt dus dat zal wel aan mij liggen. Reageren
Recommended Posts
Een reactie plaatsen
Je kan nu een reactie plaatsen en pas achteraf registreren. Als je al lid bent, log eerst in om met je eigen account een reactie te plaatsen.