iversenfoni: Zufallsbild pro Tag - Code fehlerhaft?

Hallo!

Ich habe hier einen Code, der ein Zufallsbild pro Tag generiert. Er funktioniert auch - aktualisiert man die Seite mit dem Bild nur, bleibt der Bereich, wo das Bild wieder geladen werden sollte, leer!

Vielleicht entdeckt jemand den Fehler?

Der Code:

---

<script language="JavaScript"><!--

now = new Date();
day = now.getDay();

{
var zufall = Math.round(Math.random() * day) +1;
zufall;
}

{
if (zufall == 0)
  document.write ("<img src='001.jpg' name='titel' height='111' width='652' border='0'

usemap='#Identity'>");
else if (zufall == 1)
  document.write ("<img src='002.jpg' name='titel' height='111' width='652' border='0'

usemap='#Identity'>");
else if (zufall == 2)
  document.write ("<img src='003.jpg' name='titel' height='111' width='652' border='0'

usemap='#Identity'>");
}

//-->
</script>

---

Gruß, Jörg

  1. Moin!
    Laß Dir mal spaßeshalber die Variable 'zufall' mittels alert(zufall) ausgeben.

    MFFG (Mit freundlich- friedfertigem Grinsen)

    fastix®

    --
    Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
  2. Hallo.

    Ich habe da ein paar Fehler gefunden:

    var zufall = Math.round(Math.random() * day) +1;

    Worauf willst du hinaus?

    zufall;

    Das ist zwar nicht falsch, allerdings bewirkt es auch nichts.

    {

    Wofür steht die Klammer?
    Eigentlich gehören solche Klammern zu Funktionen oder Kontrollstrukturen.

    document.write ("<img src='001.jpg' name='titel' height='111' width='652' border='0'

    usemap='#Identity'>");

    Du hast zwei Zeilenumbrüche in einem String. Mein Mozilla hat hier schon den Dienst quittiert.

    Abgesehen davon, machst du 3x hintereinander fast das gleiche.
    Da kann man auch noch was machen.
    Alles in allem frag ich mich, ob du dir wirklich sicher bist, was du willst bzw. wie man es macht (ist nicht böse gemeint).

    MfG _Siro.

  3. Hallo Iversenfoni,

    Ich habe hier einen Code, der ein Zufallsbild pro Tag generiert.

    Ich verstehe ehrlich gesagt nicht ganz, was du damit meinst. Pro Tag ein Zufallsbild - wird also jedem Tag genau ein vorher festgelegtes Bild zugeordnet? Oder gibts am Monatsanfang nur genau ein zufällig ausgewähltes Bild und am Monatsende 31 zufällig ausgewählte Bilder, die alle nebeneinander auf der Seite angezeigt werden?

    Jedenfalls sind aber im Code einige Fehler - vielleicht funktioniert's ja, wenn du die ausbesserst:

    day = now.getDay();

    Du weißt, dass getDay() den *Wochen*tag liefert, nicht den Tag im Monat?

    {
    [...]
    }

    Haben die geschwiffenen Klammern hier eine Bedeutung? Achtung: Es könnte sein, dass die Variable "zufall" lokal eingeführt wird (wegen dem "var" bei der Deklaration) und ihr Gültigkeitsbereich auf den Anweisungsblock, der durch die geschwiffenen Klammern begrenzt ist, eingeschränkt ist.

    var zufall = Math.round(Math.random() * day) +1;

    Math.round() ist hier wahrscheinlich fehl am Platz, weil damit ab n+0.5 aufgerundet wird. D.h. dass die Eins nur halb so wahrscheinlich ist wie die anderen Zahlen, und dass der Variablen "zufall" auch ein Wert um eins größer als "day" zugewiesen werden kann, wenn Math.random() eine Zahl sehr nahe an 1 liefert. Nimm lieber Math.floor().

    Bist du dir wirklich sicher, dass diese Berechnung den gewünschten Sinn gibt? Du erhältst damit *eine* Zufallszahl, die z.B. Montags zwischen 1 und 2 liegt, Dienstags zwischen 1 und 3 und Samstags zwischen 1 und 7.

    zufall;

    Dadurch wird's auch nicht zufälliger ;-)
    (Die Anweisung bringt's nicht.)

    {
    [...]
    }

    Dieser Anweisungsblock ebenfalls nicht. Kann aber auch sein, dass ich nur grad irgend einen JavaScript-Trick nicht kenne. Irgendwie verunsichern mich diese Klammern.

    if (zufall == 0)

    Die Variable "zufall" kann nie den Wert 0 annehmen, da du bei der Zuweisung zum Rückgabewert von Math.round() noch 1 draufgezählt hast.

    Bei deinen if-Abfragen kann es übrigens vorkommen, dass keiner der überprüften Fälle eintritt. Weiß jetzt nicht, ob das erwünscht ist. Eigentlich brauchst du die Abfragen aber auch nicht, wenn du statt dessen einfach schreibst:

    document.write("<img src='00" + (zufall+1) + ".jpg' name='titel' height='111' width='652' border='0' usemap='#Identity'>");

    Nochmal: Das Bild "001.jpg" wird damit nie angezeigt werden, weil die Variable "zufall" nie den Wert 0 annehmen wird (oder bin ich jetzt grad völlig auf dem falschen Dampfer?).

    aktualisiert man die Seite mit dem Bild nur, bleibt der Bereich, wo das Bild wieder geladen werden sollte, leer!

    Das könnte daran liegen, dass vielleicht die Variable "zufall" gerade zufälliger Weise auf einen Wert größer als 2 gesetzt wurde. Das sollte jedoch nur Dienstags bis Samstags möglich sein.

    Viel Erfolg,
    Robert