Do Schleife wird nicht verlassen???

  • Habe gerade ein echt seltsames Problem:
    Habe ein Array mit 32 Zuständen gefüllt, möchte nun durch Zufall 16 Werte in ein zweites Array schreiben.
    Dabei soll es keine doppelten Zustände geben. Habe das ganze so gelöst:

    Spoiler anzeigen
    [autoit]


    Local $Cards[32]
    $Cards[0] = "KaroAs"
    $Cards[1] = "KaroKoenig"
    $Cards[2] = "KaroDame"
    $Cards[3] = "KaroBube"
    $Cards[4] = "Karo7"
    $Cards[5] = "Karo8"
    $Cards[6] = "Karo9"
    $Cards[7] = "Karo10"

    [/autoit] [autoit][/autoit] [autoit]

    $Cards[8] = "HertzAs"
    $Cards[9] = "HertzKoenig"
    $Cards[10] = "HertzDame"
    $Cards[11] = "HertzBube"
    $Cards[12] = "Hertz7"
    $Cards[13] = "Hertz8"
    $Cards[14] = "Hertz9"
    $Cards[15] = "Hertz10"

    [/autoit] [autoit][/autoit] [autoit]

    $Cards[16] = "PiekAs"
    $Cards[17] = "PiekKoenig"
    $Cards[18] = "PiekDame"
    $Cards[19] = "PiekBube"
    $Cards[20] = "Piek7"
    $Cards[21] = "Piek8"
    $Cards[22] = "Piek9"
    $Cards[23] = "Piek10"

    [/autoit] [autoit][/autoit] [autoit]

    $Cards[24] = "KreuzAs"
    $Cards[25] = "KreuzKoenig"
    $Cards[26] = "KreuzDame"
    $Cards[27] = "KreuzBube"
    $Cards[28] = "Kreuz7"
    $Cards[29] = "Kreuz8"
    $Cards[30] = "Kreuz9"
    $Cards[31] = "Kreuz10"

    [/autoit] [autoit][/autoit] [autoit]

    ;Player1 6 Karten zuweisen

    [/autoit] [autoit][/autoit] [autoit]

    Local $Player1[18]
    $Player1[0] = $Cards[Random(0,31)]

    [/autoit] [autoit][/autoit] [autoit]

    Do
    $Player1[1] = $Cards[Random(0,31)]
    Until Not $Player1[0] == $Player1[1]

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Do
    $Player1[2] = $Cards[Random(0,31)]
    Until not $Player1[2] == $Player1[0] AND $Player1[1]

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    MsgBox(0,"Cards of Player 1!",$Player1[0] & @CRLF & $Player1[1] & @CRLF & $Player1[2])

    [/autoit]

    Habe zunächst nur mal testeshalber 2 Do-Schleifen und 3 Werte ausgelesen, jedoch verlässt er keine der Do-Schleifen, auch wenn der Zustand nicht gleich dem vorherigen zugewiesenen Wert ist. ?(

    Einmal editiert, zuletzt von SomeDudeFromPast (9. Mai 2010 um 22:28)

  • das verstehe ich nicht...

    [autoit]

    AND $Player1[1]

    [/autoit]

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    über mich...

    ich habe meine Erfahrungen hauptsächlich gesammelt in (grobe Übersicht):

    - RibbonBar Automation
    - MySQL Nutzung
    - GUIs in vielerlei Ausprägung
    - Nutzung von Powershell / Batch in AutoIt
    - Windows Automatisierung

    außerhalb von AutoIt:

    - Sprachen: PS, Batch, php, html(5), javascript, (perl eingeschränkt), vbs
    - Powershell (AD, WPF inkl. Multi-Threading, ...)
    - Deployment-Automatisierung ohne SCCM
    - Office-Nutzung mit COM-Object (AutoIt, PowerShell)
    - ActiveDirectory und alles was damit zusammenhängt
    - Hyper-V Clustering (Converged / Hyper Converged)
    - Serverhardware (Konfiguration, Aufbau, Architektur, Betrieb)

    Lieblingsthema:

    günstige Automatisierung von Vorgängen, für die andere Firmen viel Geld nehmen

    more to come ...

  • Die Schleife soll solange durchlaufen bis $Player1[2] einen Wert ungleich den Werten von $Player[0] und $Player[1] angenommen hat.

  • Hi

    Ich verstehe es auf die schnelle auch nicht, aber schreibe mal ne msgbox mit den Variabeln als Wert mit rein. Dort kannst Du dann sehen warum sie nicht abbricht.

    Gruß Ralf

  • Was bringen die Klammern?

    Spoiler anzeigen

    Grundkenntnisse in: C++, JavaScript
    Sehr gute Kenntnisse: PHP, JAVA, C und näturlich AutoIt


    Klaviatur, Anhang UDF, GDI+ Mühle

    Zitat

    "Wenn einen um 20h der Pizzadienst anruft und fragt, ob man's nur vergessen hat und ob man das gleiche
    möchte wie immer -- dann sollte man sein Bestellverhalten evtl überdenken"

  • Ja das ist seltsam wenn ich mir nach dem schreiben in das Array die Werte in ner MsgBox ausgebe, sind beide Arrays oft mit unterschiedlichen Werten beschrieben, so wie es auch soll, jedoch verlässt er die Schleife trotzdem nicht. ?(
    Verwirrend. Gibts bei Arrays und Schleifen Sonderregelungen?

  • also ich würde erstmal eine Do-Schleife so beenden:

    [autoit]

    Until $Player1[0] <> $Player1[1]

    [/autoit]

    desweiteren ist eine solche Schleife immer aktiv, bis die Bedingung erfüllt ist.
    Erfüllt heißt im Klartext "1" / True.

    [autoit]

    Do
    $Player1[2] = $Cards[Random(0,31)]
    Until not $Player1[2] == $Player1[0] AND $Player1[1]

    [/autoit]


    Deine Bedingung würde übersetzt lauten: mach solange, bis nicht Inhalt $Player1[2] dem Inhalt von $Player1[0] entspricht und nicht $player1[1] 1 oder True ist. Und das case-sensitiv.
    Macht das wirklich Sinn???

    In Deinem Fall würde ich schreiben (Die Schleife soll solange durchlaufen bis $Player1[2] einen Wert ungleich den Werten von $Player[0] und $Player[1] angenommen hat.)

    [autoit]

    Do
    ...
    Until ($Player1[2] <> $Player[0]) And ($Player1[2] <> $Player[1])

    [/autoit]


    oder so ... ;)

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    über mich...

    ich habe meine Erfahrungen hauptsächlich gesammelt in (grobe Übersicht):

    - RibbonBar Automation
    - MySQL Nutzung
    - GUIs in vielerlei Ausprägung
    - Nutzung von Powershell / Batch in AutoIt
    - Windows Automatisierung

    außerhalb von AutoIt:

    - Sprachen: PS, Batch, php, html(5), javascript, (perl eingeschränkt), vbs
    - Powershell (AD, WPF inkl. Multi-Threading, ...)
    - Deployment-Automatisierung ohne SCCM
    - Office-Nutzung mit COM-Object (AutoIt, PowerShell)
    - ActiveDirectory und alles was damit zusammenhängt
    - Hyper-V Clustering (Converged / Hyper Converged)
    - Serverhardware (Konfiguration, Aufbau, Architektur, Betrieb)

    Lieblingsthema:

    günstige Automatisierung von Vorgängen, für die andere Firmen viel Geld nehmen

    more to come ...