Problem mit dem Zufall...

  • Hallo!

    Ich mal wieder mit einem Problem. Ich versuche zufällig Strings zu erzeugen wie z.B. "Kiste 6" mit was auch gut funktioniert. Dann soll aber falls "Kiste 6" schon existiert meine funktion die diesen String generiert erneut aufgerufen werden und den vorhandenen DOPPELTEN String ersetzen. Ich habe alles versucht aber es funktioniert nicht. Wenn ich die ergebnisse der Generierung in einen Array Schreibe und dann vergleichen will findet er nie etwas bzw gibt IMMER ERROR = 0 aus. Ich könnte mir das nur so erklären das ARRAY-Search oder _Arraybinarysearch nicht strings mit leerzeichen erkennen aber bei 10 anderen Lösungsversuchen bin ich auch gescheitert...

    Ich versuch mal das zu posten was nötig ist da das Projekt noch recht geheim ist ^^

    Spoiler anzeigen
    [autoit]


    ;Das ist der Aufruf für meine Funktion

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

    ;Nummer 1
    for $i = 1 to 3
    $left=$left+100
    _string($Nummer[$i])
    _ArrayAdd($pruefen, $Nummer1[$i])
    _check($Nummer1[$i])
    GUICtrlCreateLabel($Nummer1[$i], $left, $top, 70, 100, 0x1001 )
    Next

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

    ;hier die checkfunktion

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

    func _check(BYREF $CHECKEN)

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

    $ENDE=Ubound($pruefen, 1)-1
    _ArraySearch($pruefen, $CHECKEN, 1, $ENDE, 0, FALSE)
    IF @ERROR = 3 Then
    _string($CHECKEN)
    EndIf
    EndFunc

    [/autoit]

    Was ist da falsch? HÜLFEEEEE ;(

    MfG

    akira2012

    ***---____---Wer RechtSCHRAIBfehler findet der darf Sie behalLTEN!---___---***

    Einmal editiert, zuletzt von akira2012 (4. Juli 2007 um 00:11)

    • Offizieller Beitrag

    Hier mal ein funktionierendes Beispiel:

    [autoit]

    #include <array.au3>
    Dim $ar[5]=["otto","franz","paul","luise","anna"]

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

    MsgBox(0, '', _check("manfred") ) ; -1 da erfolg
    MsgBox(0, '', _check("luise") ) ; 0 da doppel
    MsgBox(0, '', _check("franz") ) ; 0 da doppel

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

    Func _Check($toSearch)
    If _ArraySearch($ar, $toSearch) = -1 Then
    _ArrayAdd($ar, $toSearch)
    Return -1
    Else
    Return 0
    EndIf
    EndFunc

    [/autoit]
    • Offizieller Beitrag

    Also warum deins nicht ging?

    Ganz simpel:
    - in Zeile 8 fügst du den Wert zum Array hinzu: _ArrayAdd($pruefen, $Nummer1[$i])
    - in Zeile 9 prüfst du ob dieser Begriff im Array enthalten ist: _check($Nummer1[$i])

    Also - falsche Reihenfolge!
    Die Duplikatsprüfung muß vor der Zuweisung erfolgen.

  • klingt jetzt irgendwie logisch -.-
    Naja bin ja noch Anfänger ^_^. Vielen Dank für die Hilfe - die Sache mit dem Return ist echt cool werd ich bestimmt noch öfter brauchen.


    MfG


    akira2012

    MfG

    akira2012

    ***---____---Wer RechtSCHRAIBfehler findet der darf Sie behalLTEN!---___---***