Sönke Tesch: Array Fehler oder Endlosschleife

Beitrag lesen

while((Laenge < 0) || (Laenge >= Banner.length))
{
Laenge = Banner.length;
Zufallszahl = Math.random()*Laenge;
Zufallszahl = Math.round(Zufallszahl);
}

Seit ich in der While Abfrage das >= eingebaut hab, baut der mir ne Endlosschleife, ich weiß aber nicht, warum.

Deine while-Bedingung lautet:

wenn [..] oder Laenge größer/GLEICH Banner.length

Eine Zeile darunter setzt Du dann Laenge GLEICH Banner.length. Da ist es kein Wunder, daß Du in einer Endlosschleife landest.

Schreib ich nur das > dann baut er mir alle paar Versuche ein
"undefined" in die Seite ein anstelle des Banners. Ich geh mal davon
aus, daß das Array an dieser Stelle nicht definiert ist, kann jedoch
nicht ganz nachvollziehen, warum. Wie krieg ich das weg ???

Das liegt daran, daß die Indizes eines Feldes von 0 bis Länge-1 laufen, nicht von 1 bis Länge. Dieses Verständnisproblem tritt wohl recht häufig auf. Schau Dir mal die folgende Kette an:

0 1 2 3 4 5

Wieviele Zahlen sind das? Fünf? Nein, sechs. Die Länge dieser Kette ist also sechs, die letzte Zahl ist aber fünf, weil auch die Null am Anfang als Zahl zählt.

Das Problem ist wiederum die Zeile, die auch schon zur Endlosschleife führt:

Laenge = Banner.length;

Laenge benutzt Du dann (indirekt) als Index für das Bannerfeld. Wie Du oben gesehen hast, ist Laenge aber eine Nummer zu groß. Daß der Fehler nur alle Nase lang auftritt, liegt an der Zufallsfunktion dazwischen, die Laenge nochmal bearbeitet.

Dann zum dritten Problem: Welchen Sinn soll die Schleife haben? Du berechnest da x-mal eine Zufallszahl. Meinst Du nicht, daß es egal sein sollte, ob man einmal eine Münze wirft oder zehnmal? Kurz: Die ganze Schleife kann weg.

Zusammengefasst sieht das alles dann so aus:

document.write(Banner[Math.round(Math.random(Banner.length-1))]);

Gruß,
  soenk.e