Verschiedene Anzeigen in 2 Listboxen trotz (vermeintlich) gleicher Daten

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von billy5.

    Verschiedene Anzeigen in 2 Listboxen trotz (vermeintlich) gleicher Daten

    Hallo allerseits,

    ich habe ein Prob, um dessen Lösung ich euch bitte. Es handelt sich um die Darstellung desselben Array-Inhalts in zwei Listboxen, die unterschiedliche Ergebnisse zeigen:

    Spoiler anzeigen
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click

    Dim temp As String
    Dim xx As Integer

    For xx = 0 To 9
    temp = sourceArray(xx)
    sourceArray(xx) = sourceArray(indArray(xx) - 1)
    sourceArray(indArray(xx) - 1) = temp
    ListBox2.Items.Add(sourceArray(xx))
    Next

    For xx = 0 To 9
    ListBox4.Items.Add(sourceArray(xx))
    Next
    End Sub


    Hintergrund: Ich definiere an anderer Stelle im Prog ein sourceArray mit dem Inhalt {"1", "2"....,"10"} sowie ein indArray mit Zufallsziffern von 1...10 In einer ersten Schleife vertausche ich die Inhalte des sorceArray und lasse mir innerhalb der Schleife die neuen Inhalte der sourceArray-Elemente in der Listbox2 anzeigen. Diese Items der Listbox2 weichen von denen der Listbox4 in einer 2. Schleife ab, obwohl sie eigentlich gleich sein müssten. Warum ist das nicht der Fall?
    (die 2. Schleife dient nur zur Demo des Problems.

    Danke vorab für eine hilfreiche Erklärung
    Gruß
    billy5

    P.S.: indArray mit Zufallsziffern von 1...10 ist korrekt

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „billy5“ ()

    Ich glaube zwar, dass man das gewünschte Grundverhalten seeehhhr elegant erreichen kann, aber aufgrund unterkühlter Füße ist von meiner Seite momentan nix zu erwarten. Daher erstmal Erfassung/Bewertung des Vorhandenen:

    billy5 schrieb:

    ein indArray mit Zufallsziffern von 0 - 9
    knallt bei

    billy5 schrieb:

    sourceArray(indArray(xx) - 1)
    Wenn indArray(x) = 0, dann ergibt die genannte Codezeile dann sourceArray(-1). Und das gibt ne Exception.

    ##########

    Außerdem zeigst Du in Zeile ... ehm ja. Du solltest besser CodeTags verwenden. Aber wurscht. Mit ListBox2.Items.Add(sourceArray(xx)) zeigst Du das aktuelle sourceArray-Item an. Aber durch weitere Schleifendurchläufe ist es sehr wahrscheinlich, dass dieses später eben geändert wird. Daher die veränderte Ausgabe in der 2. Schleife.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VaporiZed“ ()

    Hallo Vaporized,

    sorry für meinen Darstellungsfehler des Inahltes von indArray. Natürlich sorge ich für die Inhalte 1.....10, damit bei "sourceArray(xx)-1"
    der Index von 0....9 läuft und keine Exception ausgelöst wird. Kannst du den 2. Teil deiner Antwort "...ehm ja. Du solltest besser CodeTags verwenden." -( natürlich nur mit warmen Füßen-) etwas genauer erläutern.

    Danke vorab.

    Gruß
    billy5
    Erstmal in VB.Net-CodeTags:

    VB.NET-Quellcode

    1. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    2. Dim temp As String
    3. Dim xx As Integer
    4. For xx = 0 To 9
    5. temp = sourceArray(xx)
    6. sourceArray(xx) = sourceArray(indArray(xx) - 1)
    7. sourceArray(indArray(xx) - 1) = temp
    8. ListBox2.Items.Add(sourceArray(xx))
    9. Next
    10. For xx = 0 To 9
    11. ListBox4.Items.Add(sourceArray(xx))
    12. Next
    13. End Sub

    Vereinfachen wir mal das Ganze. Du hast nur je 3 Items:
    sourceArray(0) = "1"
    sourceArray(1) = "2"
    sourceArray(2) = "3"
    und
    indArray(0) = 2
    indArray(1) = 3
    indArray(2) = 1

    Dann hast Du im 1. Durchgang:
    sourceArray(0) (Wert "1") tauscht seinen Wert mit sourceArray(1) ("2")
    -> sA(0) = "2", sA(1) = "1"
    sourceArray(1) wird zu "1"
    angezeigt in LB2 wird der aktuelle Wert von sourceArray(0), also "2"

    2. Durchgang
    sourceArray(1) wird zu "3"
    sourceArray(2) wird zu "1"
    angezeigt in LB2 wird "3"

    3. Durchgang
    sourceArray(2) wird zu "2", da sourceArray(0) bereits im 1. Durchgang einen anderen Wert erhielt
    sourceArray(0) wird zu "1"
    angezeigt in LB2 wird "2"

    2. Schleife: Anzeige in LB4
    sourceArray(0): "1"
    sourceArray(1): "3"
    sourceArray(2): "2"
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Das wäre übrigens ein super Fall für die magischen Breakpoints. Sprich, Haltepunkt bei der Schleife setzen und einzeln durch gehen. Dann schauen was das Programm so macht und was mit den Variablen passiert... Hab dazu glaub nen Link in meiner Signatur (sieht man am Handy leider nicht). So lern man zu verstehen was das eigene Programm macht und kann so die Fehler finden. So hat @VaporiZed das bestimmt auch gemacht, der alte Zauberer ;) ...
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen