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 chrisbyRRC (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

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • 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

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)