Ich verstehe den gesamten folgenden Code anhand eines Beispiels für ein Buch, das ich lese. Außer der kommentierten Zeile. Ich denke, dass ohne sie die Schleife nie endet? Ich verstehe die Logik dahinter jedoch nicht.

var drink = "Energy drink";
var lyrics = "";
var cans = "99";

while (cans > 0) {
    lyrics = lyrics + cans + " cans of " + drink + " on the wall <br>";
    lyrics = lyrics + cans + " cans of " + drink + " on the wall <br>";
    lyrics = lyrics + "Take one down, pass it around, <br>";

    if (cans > 1) {
        lyrics = lyrics + (cans-1) + " cans of" + drink + " on the wall  <br>";
    }
    else {
        lyrics = lyrics + "No more cans of" + drink + " on the wall<br>";
    }
    cans = cans - 1;  // <-- This line I don't understand
}

document.write(lyrics);
1
Rufio 6 Okt. 2012 im 08:05

3 Antworten

Beste Antwort

Dies ist eine Schleife, die bei 99 (var cans = "99") beginnt und dann rückwärts bis 0 zählt. Die hervorgehobene Zeile ist die Zeile mit der Aufschrift "Eins subtrahieren". Wenn diese Zeile nicht wäre, würde sie für immer eine Schleife bilden und 99 cans of Energy drink on the wall hinzufügen.

Übrigens ist document.write nur schlecht und var cans = "99" sollte var cans = 99 sein. Natürlich ist dies wahrscheinlich nicht Ihr Code, nur sagen. Mein Rat: Lesen Sie weiter.

2
D. Strout 6 Okt. 2012 im 04:12

Wie D Strout sagte, ist es eine Schleife. Grundsätzlich lautet Ihr Code "Wenn die Variable cans größer als 0 ist, führen Sie diese Aktion aus". Wenn sich der Wert von Dosen niemals ändert, würde er versagen oder sich auf unbestimmte Zeit wiederholen. Sie beginnen also im Grunde mit 99 Dosen. Für jede Dose wird die Anzahl der Dosen um 1 subtrahiert, bis sie 0 ist. An diesem Punkt endet die Schleife.

0
Mike 6 Okt. 2012 im 04:09

D. Strout hat recht ...

Aber nur zu Ihrer Information - da Sie lernen - können Sie genau dasselbe auch mit einer 'for' - Schleife anstelle der 'while' - Schleife tun.

So was:

// store the div in a variable to use later - at the bottom 
var beer_holder = document.getElementById("beer_holder");

// Non-alcoholic to keep it PG
var drink = "O'Doul's";

var lyrics = "";

var cans = "99";

// Create a variable called 'i' and set it to the cans variable amount. 
// Check if i is greater than 0,
// if it is, than do what is between the curly brackets, then subtract 1 from cans
for(var i=cans; i > 0; i--){

    lyrics = i + " cans of " + drink + " on the wall, " + i + " cans of " + drink +
        " take one down, pour it down the sink, " + (i - 1) + " cans of O'Doul's on the wall."

    // take the paragraph tag and put the lyrics within it
    //  the <br/> tags make sure each lyric goes on a seperate line
    beer_holder.innerHTML += lyrics + "<br/><br/>";

}

Hier ist ein Link zu einem Arbeitsbeispiel, wenn Sie damit herumspielen möchten: http://jsfiddle.net/phillipkregg/CHyh2/

.

0
PhillipKregg 6 Okt. 2012 im 05:06