Gunnar Bittersmann: Weihnachtsbaum mit Kugeln (Schleifen)

Beitrag lesen

Hello out there!

<font face="Courier New">

Sämtliche Darstellungsangaben sollten mit CSS ('font') gemacht werden; nicht mit missbilligten HTML-Attributen.

Hier bietet sich auch das für präformatierten Text vorgesehene HTML-Element 'pre' an, dessen Inhalt browser auch ohne zusätzliches CSS in dicktengleicher Schrift anzeigen.

<script language="JavaScript">

So nicht; sondern mit 'type'-Attribut.

<!--

HTML-Auskommentierung von JavaScript-Code ist bestenfalls vollkommen überflüssig, andernfalls falsch. Weg damit!

var leer=7, anzplus=1;
          for (i=0;i<8;i++){

Globale Variablen sind böse[tm]. Also das Schlüsselwort 'var' vors i!

for (j=0;j<leer;j++){

Globale Varia... ach, das sagte ich ja schon,

document.write("&nbsp;");
            }
            for (j=0;j<anzplus;j++){
              document.write("+");
            }
            for (j=0;j<leer;j++){
              document.write("&nbsp;");
            }
            document.write("<br>");
            leer = (leer-1);
            anzplus = anzplus+2;
          }

Die Varible leer ist überflüssig: leer wird in der äußeren Schleife runtergezählt, i wird hochgezählt, es gilt stets leer == 7 - i.

Die Varible anzplus ist auch überflüssig: sie wird auch hochgezählt (um 2, also doppelt so schnell wie i), es gilt stets anzplus == 2 * i + 1.

Folgendes tut's also genauso:

for (var i = 0; i < 8; i++)  
{  
  for (var j = 0; j < 7 - i; j++)  
  {  
    document.write("&nbsp;");  
  }  
  for (var j = 0; j < 2 * i + 1; j++)  
  {  
    document.write("+");  
  }  
  for (var j = 0; j < 7 - i; j++)  
  {  
    document.write("&nbsp;"); // wozu eigentlich die Leerzeichen am Ende?  
  }  
  document.write("<br>");  
}

Nun soll jedes zweite + durch eine Kugel, also ein O ersetzt werden. Habt ihr eine Idee wie ich das mache?

Damit du nicht - wie andere im Thread schon vorschlugen - dividieren musst (was teuer ist!), speicherst du dir in einer boolschen Variablen, ob du eine Glaskugel an den Weihnachtsbaum hängst oder nicht. Bei jedem Schreiben fragst du sie ab und negierst dann ihren Wert:

for (var i = 0, istGlaskugel = false; i < 8; i++)  
{  
  for (var j = 0; j < 7 - i; j++)  
  {  
    document.write("&nbsp;");  
  }  
  for (var j = 0; j < 2 * i + 1; j++)  
  {  
    if (istGlaskugel)  
      document.write("O");  
    else  
      document.write("+");  
    istGlaskugel = !istGlaskugel;  
  }  
  for (var j = 0; j < 7 - i; j++)  
  {  
    document.write("&nbsp;"); // wozu eigentlich die Leerzeichen am Ende?  
  }  
  document.write("<br>");  
}

Das nur zur Veranschuung; üblicherweise würde man die Abfrage anders schreiben:

for (var i = 0, istGlaskugel = false; i < 8; i++)  
{  
  for (var j = 0; j < 7 - i; j++)  
  {  
    document.write("&nbsp;");  
  }  
  for (var j = 0; j < 2 * i + 1; j++)  
  {  
    document.write(istGlaskugel ? "O" : "+");  
    istGlaskugel = !istGlaskugel;  
  }  
  for (var j = 0; j < 7 - i; j++)  
  {  
    document.write("&nbsp;"); // wozu eigentlich die Leerzeichen am Ende?  
  }  
  document.write("<br>");  
}

See ya up the road,
Gunnar

--
„Und [dieses Forum] soll […] auch ein Fachforum bleiben und kein Psychologieforum werden.“ (Kirsten Evers)