[JS] Äußere for-Schleife wird entweder kein oder nur einmal durchlaufen..

  • Hey Leute,

    ich versuche derzeit das Brettspiel "Risiko" in JavaScript zu programmieren, habe jetzt aber ein Problem bei welchem ich nichtmehr weiter weiß. Und zwar geht es darum, am Anfang des Spiels die Länder auf die Spieler aufzuteilen. Begonnen habe ich mit folgender Funktion:

    Code
    function laender_verteilen() {
        var LaenderlisteVerteilen = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47];
        for(var j=1;j<Spielernamen.length;j++) {                                        //läuft jeden Spieler einmal durch
            var vertLand = Math.floor(LaenderlisteVerteilen.length * Math.random());     //vertLand ist eine RandomZahl zwischen 0 und ElementAnzahl
            Spieler[j]['laender_besitz'].push(LaenderlisteVerteilen[vertLand]);            //spieler der gerade durchlaufen wird bekommt das ausgewählte Land
            Land[LaenderlisteVerteilen[vertLand]]['Truppen'] = 1;                        //Truppen in ausgewähltem Land werden auf 1 gesetzt
            LaenderlisteVerteilen.splice(vertLand,vertLand+1);                            //ausgewähltes Land wird aus Liste gelöscht
    
        }
    }


    Diese läuft mit Absicht nur einmal alle Spieler einmal durch und weist jedem ein Land zu.

    Da es jetzt aber abhängig von der Spieleranzahl ist, wieviele Länder die Spieler am Anfang bekommen, wollte ich diese for-Schleife in eine andere for-Schleife setzen:


    Doch aus irgendeinem Grund funktioniert diese Funktion nicht.. Wenn ich in die äußere for-Schleife (gleich nach der inneren) ein break; oder return; setze funktioniert die Funktion zwar (und auch das restliche JS-Zeug auf der Siete wird ausgeführt), aber erwartungsgemäß wird die äußere Schleife dann auch nur einmal durchlaufen (und führt somit zum selben Ergebnis wie mein "Prototyp").

    Ich sitze da jetzt schon gute 2 Stunden, hab etliche Male gegoogelt, es sogar schon mit while-Schleifen (statt der äußeren for) probiert, aber die verhalten sich dann genauso.. Findet ihr vllt den Fehler den ich die ganze Zeit übersehe und könnt mir helfen?
    Danke schon im Vorraus!

    LG
    BafTac

    PS: Tippfehler in der zweiten Variante sind ausgeschlossen, weil ich den Teil eig nur kopiert habe, schon mehrere Male danach gesucht habe und es ja zumindest einmal funktioniert wenn ein "return;" da ist..

  • Was macht dich so sicher, dass die Schleife nur einmal ausgeführt wird? Baue doch mal ein paar alert's ein.

  • gute Idee :)


    sorgt dafür, dass einmal ein alertfenster mit "i = 0" aufgeht, ansonsten geht weiterhin nichts


    sorgt dafür, dass zuerst j=1,j=2,..,j=6 und danach i=0 kommen und die äußere Schleife wird nur einmal durchgelaufen (logischerweise, wegen return)

    Also kann man eindeutig sagen, dass die äußere Schleife nur einmal durchlaufen wird..

    aber..

    erzeugt folgendes:
    Popup "test"
    popups "j1 spielername1","j2 spielername2",..."j6 spielername6"
    popup "i = 0"
    popup "test"
    popups "j1","j2","j3","j4"

    okay ich glaub ich hab irgendwo in den 4 zeilen von denen ich dachte, dass sie stimmen einen (denk-)fehler, da bei jedem versuch unterschiedlich viele pouops des zweiten durchgangs auftauchen.. Kannst du da vllt einen Fehler erkennen ohne genau zu wissen was hinter dem Zeugs steckt?
    Ich glaub, dass es iwas damit zu tun hat, dass ein zufälliges Element aus dem Array LaenderlisteVerteilen ausgewählt und dann rausgeschnitten wird..

  • ein test mit

    hat gezeigt, dass er anscheinend immer bis ans Ende wegschneidet also das zweite Argument im .splice funzt nicht richtig..


    *Head vs. Tisch*

    Problem gelöst:
    ich hab die Argumentübergabe von der .splice() Methode mit der von slice() verwechselt..
    bei slice muss man angeben BIS ZU WELCHEM element gelöscht werden soll..
    bei dem verwendeten splice die ANZAHL DER ZU LÖSCHENDEN..

    Problem behoben und es funktioniert wie es soll!

    Danke für deinen Tipp mit den alerts und generell danke für die Hilfe sonst würd ich wohl noch immer im Dunkeln tappen..

  • wenn du im firefox mit firebug entwickelst kannst du auch ganz prima über console.log(valuexyz) ne ausgabe erwirken, ohne dass du jedes mal über nen alert unterbrichst

    das mit console.log hab ich nicht gewusst, danke!
    und in die Fehlerkonsole hab ich jedes Mal geschaut da hat er aber immer nur Fehler auf den Google-Seiten angezeigt^^

  • jahaa
    kannste ja mal testen, console.log console.error und console.info sinds glaube ich...
    überhaupt is firebug in meinen augen nen überlegenes werkzeug zum entwickeln mit javascript/jquery