Visual Basic: Zahlen nach Gerade Ungerade ordnen

DerMeister218

Cadet 4th Year
Registriert
Nov. 2013
Beiträge
81
Guten Tag,
ich muss für den Informatikunterricht (Klasse 11, Gymnasium) ein Programm in Visual Studio programmieren, das 5 eingegebene Zahlen mithilfe eines Arrays nach Gerade und Ungerade ordnen soll.
Ich bin schon relativ weit gekommen, allerdings habe ich jetzt das Problem, dass es nur jeweils die letzte geordnete Zahl korrekt ausgibt, die Zahlen davor werden alle 0.
Ich weiß, dass ich meine Hausaufgaben gefälligst selbst erledigen soll, aber vielleicht kann mal jemand den Code kurz überprüfen und den Fehler herausfinden :D

Hier der Code:
Code:
Private Sub btnBerechnen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBerechnen.Click
        Dim intArray(4), intUngerade(), intGerade(), intRest, intU, intG As Integer
        intArray(0) = CInt(txtZahl1.Text)
        intArray(1) = CInt(txtZahl2.Text)
        intArray(2) = CInt(txtZahl3.Text)
        intArray(3) = CInt(txtZahl4.Text)
        intArray(4) = CInt(txtZahl5.Text)
        intU = 0
        intG = 0
        For intIndex = 1 To 5
            intRest = intArray(intIndex - 1) Mod 2
            If intRest = 1 Then
                intU = intU + 1
                ReDim intUngerade(intU - 1)
                intUngerade(intU - 1) = intArray(intIndex - 1)
            Else
                intG = intG + 1
                ReDim intGerade(intG - 1)
                intGerade(intG - 1) = intArray(intIndex - 1)
            End If
        Next
        If intU > 1 Then
            For intIndex = 1 To intU
                lstUngerade.Items.Add(CStr(intUngerade(intIndex - 1)))
            Next
        End If
        If intG > 1 Then
            For intIndex = 1 To intG
                lstGerade.Items.Add(CStr(intGerade(intIndex - 1)))
            Next
        End If
    End Sub
End Class

Ich danke schonmal im Vorraus :)
Viele Grüße
Julian
 
Lies zu ReDim in der Dokumentation/Referenz genau nach, dann solltest Du finden, warum dein Problem auftritt und auch wie es lösbar ist.
 
..noch einfacher wird es, wenn du die gefunde Zahl gleich in die entsprechende Listbox schreibst :-)
 
Stimmt, die Ausgabe kann ja gleich mit oben in die Schleifen, danke :)
Ergänzung ()

Schade, ich hab alles überdacht und weiß immer noch nicht was an dem Redim falsch ist, es legt ja dann immer das nächstkleinere Array fest... naja, es funktioniert ja an sich schon, besser krieg ich es mit meinem Verständnis für das Programmieren nicht hin :(
 
Erster Treffer bei Google:
https://msdn.microsoft.com/de-de/library/w8k3cys2.aspx

Unter Verhalten ist dort erklärt:
  • Arrayersatz: ReDim Gibt das vorhandene Array frei und erstellt ein neues Array mit demselben Rang. Das neue Array ersetzt das freigegebene Array in der Arrayvariablen.
  • Initialisierung ohne Beibehaltung (Preserve): Wenn Sie kein Preserve-Element angeben, werden die Elemente des neuen Arrays von ReDim mit dem Standardwert für ihren Datentyp initialisiert.
  • Initialisierung mit Beibehaltung (Preserve): Wenn Sie Preserve angeben, kopiert Visual Basic die Elemente aus dem vorhandenen Array in das neue Array.
 
Danke, aber die Seite kriege ich ja auch wenn ich F1 drück... ich probiere es mal auf einem anderen Weg :)
 
ReDim Preserve intUngerade(intU - 1)

Ansonsten löschst du das Array, bevor es vergrößert wird und dann steht natürlich 0 drin
 
Zurück
Oben