Cijfers sorteren in VB.net

Status
Niet open voor verdere reacties.
Als je het weer met een loop doet, dan wordt voor iedere textbox hetzelfde stukje code uitgevoerd.

Je hebt bijvoorbeeld dit in je loop staan: "Msgbox("Tien aanwezig!")". En er is 1 textbox waarin een 10 staat, dan krijg je 1 keer die messagebox. Maar als er nu 2 textboxen zijn waarin een 10 staat, dan krijg je 2 keer die messagebox.

En opnieuw scheelt dat weer een hoop typwerk...


Geen dank voor de hulp, daarvoor is het toch immers een forum... :)

Succes!


PS: Je moet nog wel een goede code verzinnen voor in de loop... Maar dat lukt wel :thumb:



*EDIT*
Ik heb nog even een klein vraagje: Snap je (tot nu toe) alles? Is het niet zo dat je onze oplossingen hier kopiëerd en dan inlevert?
Helaas kan ik een paar mensen die dat zo zouden doen...:confused:
 
Laatst bewerkt:
Nope, ik kopieer niks. Snap alles, alleen de loops zijn een beetje wazig. En je bent niet de enige die een hekel heeft aan mensen die gewoon alles kopieren.
 
Ik ben een tijdje afwezig geweest in dit topic, maar als ik het goed begrijp moet je met een loop checken of een waarde in een array is?

Dit kan met een For-Each loop, maar ook met de Exists-method van de array ;)

Helaas ken ik een paar mensen die dat zo zouden doen...:confused:
@MartinJM: Ja, daar kan ik ook over meepraten :P

Maar Scandax denkt zelf actief mee aan een oplossing, dus ik ben er van overtuigd dat hij, al dan niet met behulp van onze code, zelf zijn code schrijft ;)
 
Laatst bewerkt:
Ja, ik ook wel, maar ik ben liever voorzichtig dan dat achteraf iets anders blijkt...

En het probleem zit hem er ook in dat er iets moet gebeuren voor iedere 10 die in de array staat... Dan lijkt mij een loop toch wel handiger...

MartinJM
 
@MartinJM: Dan is een loop inderdaad handiger.
 
Heb eens geprobeerd met een loop, echter voegt hij elk item nu opnieuw toe en blijft van het sorteren vrij weinig over. Hieronder een deel van de code.

Code:
                    Dim tien As Integer = 10
                    Dim getallen As String() = {TextBox1.Text, TextBox2.Text, TextBox3.Text, TextBox4.Text, TextBox5.Text,                TextBox6.Text, TextBox7.Text, TextBox8.Text, TextBox9.Text, TextBox10.Text}
                    Array.Sort(getallen)

                    For Each i As String In getallen
                        ListBox1.Items.Add(i)
                    Next

                    For Each tien In getallen
                        ListBox1.Items.Remove("10")
                        ListBox1.Items.Add(tien)
                    Next

Ik denk dat het mis gaat doordat ik twee keer een loop onder elkaar heb staan. Wat denken jullie hiervan, en hoe is dit probleem op te lossen?

Trouwens, " Dim getallen as... " heb ik zeer lang gemaakt, is het nuttig om hier ook nog een loop voor te maken? Want dit werkt op zich ook goed.
 
Laatst bewerkt:
Nee, het is niet omdat je 2 loops onder elkaar hebt staan. Het is omdat hij de variable 'tien' ziet als een integer (wat het ook is). Kortom, hoe vb de 2e loop ziet is zo:

Code:
Voor elke Integer in de array 'getallen':
     "10" uit "listbox1" halen.
     De Integer (die opgehaald is met de eerste regel van de loop) in "listbox1" zetten.
Volgende integer.


Wat hieraan te doen is, is op zich simpel:
Je maakt een nieuwe integer aan in het begin van de loop, en gebruikt die verder in de loop. In de loop check je dan eerst of die integer het getal 10 is. Als die integer het getal 10 is, dan moet er iets gebeuren:
Code:
        Dim tien As Integer = 10
        Dim getallen() As Integer = {3, 5, 10, 2, 6}

        Array.Sort(getallen)

        For Each i As String In getallen
            ListBox1.Items.Add(i)
        Next

        For Each i As Integer In getallen
            If i = 10 Then
                ListBox1.Items.Remove("10")
                ListBox1.Items.Add(i)
            End If
        Next


Je kan hier ook nog wat meer info vinden over loops, dan kan je ze misschien beter begrijpen: http://msdn.microsoft.com/en-us/library/5z06z1kb.aspx & http://msdn.microsoft.com/en-us/library/5ebk1751%28v=vs.80%29.aspx.
Persoonlijk gebruik ik vaker (/altijd) de "for..next" loop en niet de "for each...next" loop, omdat ik die eerste makkelijker in gebruik vind. Misschien ook een beetje omdat ik die ook moet gebruiken in C#.


Succes!


*EDIT*
Wat me nu opeens opvalt, is dat je in de eerste loop naar iedere string kijkt... Waarom niet gewoon integer? Het gaat toch alleen maar over getallen?

Voor de loop met textboxen: Het kan wel met een loop en dat gaat waarschijnlijk ook wel lonen als je meer textboxen wilt gaan toevoegen. Maar voor nu zou ik zeggen dat het zo ook werkt.
 
Laatst bewerkt:
Dus eigenlijk staat die i in " For each i as... " gewoon voor een willekeurig getal, tenzij je er een naam aan geeft?
Eigenlijk zijn loops dus zeer simpel in gebruik, ik vond ze er altijd een beetje ingewikkeld uit zien.

Het programmaatje is dan nu ook klaar, heb geen andere fouten meer gevonden. Als jullie willen, kan ik het cijfer dat ik hiervoor krijg hier posten? Alleen als jullie het graag willen weten :P

Hartelijk dank voor al de hulp, weer een stuk slimmer geworden afgelopen week.

Groetjes
 
Wil je je project hier dan even posten, ik ben benieuwd of het cijfer dan overeenkomt met wat ik in gedachten zou hebben ;)
 
Goed als ik 'm PM? Weet dat een aantal mede-leerlingen ook wel eens op het forum kijken, en wil niet het risico lopen dat ik voor fraudeur wordt aangezien :).

Hoe dan ook, kijk maar eens in de PM box :)

--edit--
Wist niet dat ik niet kon PM'en...
e-mail?
 
Laatst bewerkt:
Hmm, ik vind het een beetje een grote code :P
Ik zal even een voorbeeld(!)project voor je maken.

Stond er in de opdracht dat je alleen getallen vanaf 1 tot 10 mocht invullen?
 
Alleen getallen tussen de 1 en 10 zijn toegestaan. Ik weet dat het op sommige plekken korter kan, maar het werkt :P
 
Mag ik het ook eens zien? Ik ben ook wel benieuwd :)
 
Goed als ik 'm PM? Weet dat een aantal mede-leerlingen ook wel eens op het forum kijken, en wil niet het risico lopen dat ik voor fraudeur wordt aangezien :).

Hoe dan ook, kijk maar eens in de PM box :)

--edit--
Wist niet dat ik niet kon PM'en...
e-mail?

@MartinJM
Kan ik het je ook doormailen?
 
Heb ik net niet kunnen vinden?? Er staat alleen "Stuur PM".
 
Laatst bewerkt:
Ziet er langer uit dan dat het is :P
 
Laatst bewerkt:
Ik heb ff een voorbeeldprojectje gemaakt:

testcf.png


Download: http://dl.dropbox.com/u/30158654/HM/Getallen_Sorteren.rar

Code:

[cpp]Private Sub Button1_Click() Handles Button1.Click
Try
ListBox1.Items.Clear()
Dim Getallen As New ArrayList
For Each row As DataGridViewRow In DataGridView1.Rows
Dim data As String = row.Cells(0).Value
If IsNumeric(data) Then
If data.Contains(".") Then data = data.Replace(".", ",")
If CDbl(data) >= 0 And CDbl(data) <= 10 Then
Getallen.Add(data)
End If
End If

Next

Getallen.Sort()

Dim aant As Integer = 0
For Each getal As Double In Getallen
If getal <> 10 Then ListBox1.Items.Add(getal) Else aant += 1
Next
For i = 1 To aant : ListBox1.Items.Add("10") : Next ''//tienen alsnog toevoegen
Catch ex As Exception
MsgBox(ex.ToString, 16 + 4096, "Foutmelding")
End Try
End Sub[/cpp]
 
Dat is een zeer efficiënte code, en ik snap de betekenis van de code, maar zelf was ik hier nooit op gekomen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan