Ergebnis 1 bis 7 von 7

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

  1. #1
    HTML Newbie
    Registriert seit
    21.07.2012
    Beiträge
    4
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard [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:
    Code:
    function laenderVerteilen() {
        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 i=0;i<=3;i++) {       //hier habe ich 3 nur mal zum Testen genommen, wird später dann durch eine Variable ersetzt
            for(var j=1;j<Spielernamen.length;j++) {
                var vertLand = Math.floor(LaenderlisteVerteilen.length * Math.random());
                Spieler[j]["laender_besitz"].push(LaenderlisteVerteilen[vertLand]);
                Land[LaenderlisteVerteilen[vertLand]]["Truppen"] = 1;
                LaenderlisteVerteilen.splice(vertLand,vertLand+1);
            }
        }
    }
    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..
    Achtung: Dies ist ein alter Thread im HTML und Webmaster Forum
    Diese Diskussion ist älter als 90 Tage. Die darin enthaltenen Informationen sind möglicherweise nicht mehr aktuell. Erstelle bitte zu deiner Frage ein neues Thema im Forum !!!!!

  2. #2
    Bandit
    Gast

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

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

  3. #3
    HTML Newbie
    Themenstarter

    Registriert seit
    21.07.2012
    Beiträge
    4
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

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

    gute Idee

    Code:
    function laenderVerteilen() {
        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 i=0;i<=3;i++) {
            for(var j=1;j<Spielernamen.length;j++) {
                var vertLand = Math.floor(LaenderlisteVerteilen.length * Math.random());
                Spieler[j]["laender_besitz"].push(LaenderlisteVerteilen[vertLand]);
                Land[LaenderlisteVerteilen[vertLand]]["Truppen"] = 1;
                LaenderlisteVerteilen.splice(vertLand,vertLand+1);
            }
            alert("i = " + i);
        }
    }
    sorgt dafür, dass einmal ein alertfenster mit "i = 0" aufgeht, ansonsten geht weiterhin nichts

    Code:
    function laenderVerteilen() {
        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 i=0;i<=3;i++) {
            for(var j=1;j<Spielernamen.length;j++) {
                var vertLand = Math.floor(LaenderlisteVerteilen.length * Math.random());
                Spieler[j]["laender_besitz"].push(LaenderlisteVerteilen[vertLand]);
                Land[LaenderlisteVerteilen[vertLand]]["Truppen"] = 1;
                LaenderlisteVerteilen.splice(vertLand,vertLand+1);
                alert("j = " + j);
            }
            alert("i = " + i);
            return;
        }
    }
    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..
    Code:
    function laenderVerteilen() {
        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 i=0;i<=3;i++) {
            alert("test");
            for(var j=1;j<Spielernamen.length;j++) {
                var vertLand = Math.floor(LaenderlisteVerteilen.length * Math.random());
                Spieler[j]["laender_besitz"].push(LaenderlisteVerteilen[vertLand]);
                Land[LaenderlisteVerteilen[vertLand]]["Truppen"] = 1;
                LaenderlisteVerteilen.splice(vertLand,vertLand+1);
                alert("j = " + j + " spieler: " + Spieler[j]["Spielername"]);
            }
            alert("i = " + i);
        }
    }
    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..

  4. #4
    HTML Newbie
    Themenstarter

    Registriert seit
    21.07.2012
    Beiträge
    4
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

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

    ein test mit

    Code:
    function laenderVerteilen() {
        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 i=0;i<=3;i++) {
            alert("test");
            for(var j=1;j<Spielernamen.length;j++) {
                var vertLand = Math.floor(LaenderlisteVerteilen.length * Math.random());
                Spieler[j]["laender_besitz"].push(LaenderlisteVerteilen[vertLand]);
                Land[LaenderlisteVerteilen[vertLand]]["Truppen"] = 1;
                LaenderlisteVerteilen.splice(vertLand,vertLand+1);
                alert("j = " + j + " laenge: " + LaenderlisteVerteilen.length);
            }
            alert("i = " + i);
        }
    }
    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..

  5. #5
    Forum Guru Avatar von synaptic
    Registriert seit
    20.06.2007
    Ort
    Butzbach-Wiesental
    Beiträge
    10.901
    Danke
    45
    Bekam 48 mal "Danke" in 46 Postings
    Blog-Einträge
    1

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

    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
    KEIN support via pn, email, messenger oder falsch geposteten threads
    Futter für deine Schnuffelzwerge gibts bei den Schnuffelzwergen TOP Qualität, also klicken und kaufen

  6. #6
    HTML Newbie
    Themenstarter

    Registriert seit
    21.07.2012
    Beiträge
    4
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

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

    Zitat Zitat von synaptic Beitrag anzeigen
    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^^

  7. #7
    Forum Guru Avatar von synaptic
    Registriert seit
    20.06.2007
    Ort
    Butzbach-Wiesental
    Beiträge
    10.901
    Danke
    45
    Bekam 48 mal "Danke" in 46 Postings
    Blog-Einträge
    1

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

    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
    KEIN support via pn, email, messenger oder falsch geposteten threads
    Futter für deine Schnuffelzwerge gibts bei den Schnuffelzwergen TOP Qualität, also klicken und kaufen

Ähnliche Themen

  1. [JS] SChleife wird nur einmal durchlaufen ?!?
    Von Tobse im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 4
    Letzter Beitrag: 26.05.2010, 22:12
  2. Smarty - section - Wird durchlaufen aber Werte nicht belegt
    Von SinnlosS im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 1
    Letzter Beitrag: 12.02.2010, 15:00
  3. For Schleife wird nicht durchlaufen
    Von anki im Forum Forum für alle anderen Programmiersprachen
    Antworten: 8
    Letzter Beitrag: 20.12.2007, 18:50
  4. Warum durchläuft die schleife das nur einmal?
    Von o(-_-)o im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 1
    Letzter Beitrag: 19.06.2006, 18:33
  5. For() schleife wird nur einmal durchgegangen??
    Von SonicChriz im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 6
    Letzter Beitrag: 16.05.2006, 21:57

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •