SchmaiDaiChai: Verschachtelte Schleifen

Hallo zusammen,

kann mir irgend jemand erklären warum diese if-else Anweisung nicht funktionier, bzw warum es nicht durchläuft?

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<html>
<head>
<title>Gehzeit Rechner ;-)</title>
<script type="text/javascript">
<!--

function ZeitRechnen(Stunden, Minuten) {
  var ArbZeit = 480;                                        //Reguläre Arbeitszeit
  var StartStd = parseInt(Stunden) *60;                     //Umrechnen der Stunden in Minuten
  var StartMin = parseInt(Minuten) ;                     //Eingegebene Minuten + 20 Min
  var ExtraMin = StartMin + 20;

if (StartStd >= 540 && StartMin >= 30 )
  {
      alert("Sie sind nicht mehr in der Kernzeit!!!)
  }
  else
  {
    alert("1");
    if (ExtraMin <60 ) {
      var StdSollzeit =  ArbZeit + StartStd;                    //Gesamte Arbeitsstunden zusammen gerechnet
      var StdSollzeit2 = StdSollzeit/60;                         //Rechnung: Minuten in Stunden
      var Komplett = StdSollzeit2 + "." + ExtraMin;             //Rechnung: der Gehzeit
      document.StartZeitEingabe.EndZeitFeld.value = Komplett;   //Übergabe des wertes an das Ausgabe Formular
    }

else {
        var pZeit = ExtraMin - 60;
        var StdSollzeit =  ArbZeit + StartStd;                    //Gesamte Arbeitsstunden zusammen gerechnet
        var StdSollzeit2 = StdSollzeit/60                         //Rechnung: Minuten in Stunden

if (pZeit <10) {
          var Komplett = StdSollzeit2+1 + ".0" + pZeit;              //Rechnung: der Gehzeit
        document.StartZeitEingabe.EndZeitFeld.value = Komplett;   //Übergabe des wertes an das Ausgabe Formular
        }
        else {
          var Komplett = StdSollzeit2+1 + "." + pZeit;             //Rechnung: der Gehzeit
        document.StartZeitEingabe.EndZeitFeld.value = Komplett;   //Übergabe des wertes an das Ausgabe Formular
        }
      }
  }
}

//-->
</script>
</head>
<body>
<form name="StartZeitEingabe" action="">
<pre>
Anfangs Uhrzeit
<p>Stunden: <input type="text" name="eingStunden" /></p>
<p>Minuten: <input type="text" name="eingMinuten" /></p>
</pre>

<input type="button" value="Endzeit Ausrechnen"
  onClick="ZeitRechnen(document.StartZeitEingabe.eingStunden.value, document.StartZeitEingabe.eingMinuten.value);"/>

<!--     onClick="XY(document.StartZeitEingabe.ZeitEingabe.value)"/> //-->
<pre>
Sie dürfen um: <input type="text" name="EndZeitFeld" />Uhr gehen.
</pre>

</form>

</body>
</html>
gruß Schmaid

  1. Hallo SchmaiDaiChai,

    Hallo zusammen,

    kann mir irgend jemand erklären warum diese if-else Anweisung nicht funktionier, bzw warum es nicht durchläuft?

    Ich hab das Script nun nicht auseinanderklamüsert, aber mir ist auf Anhieb aufgefallen, daß du zu dem if-Block 2! else Anweisungen hast.
    richtig wäre imho:
    if-Block
    else if-Block
    else (wird ausgeführt, wenn beide vorhergehende Bedingungen nicht zutreffen)

    Gruß

    Kurt

    --
    "Mut ist eine Tugend, doch Angst beweist Vernunft, Bewusstsein und Phantasie. Die Kunst ist es abzuwaegen."  (Moriartes, gr. Philosoph, 314-244 v. Chr.)
    http://elektro-dunzinger.at
    http://shop.elektro-dunzinger.at
    1. Hi KD-one,

      Ich hab das Script nun nicht auseinanderklamüsert, aber mir ist auf Anhieb aufgefallen, daß du zu dem if-Block 2! else Anweisungen hast.

      Ich weiß nicht welche du meinst? Die sind doch ineinander verschachtelt wenn du genau guckst.

      Gruß Schmaid

      1. Hallo SchmaiDaiChai,

        Ich weiß nicht welche du meinst? Die sind doch ineinander verschachtelt wenn du genau guckst.

        Ja, natürlich.
        Aufgrund deiner unterschiedlichen Schreibweise bei den Klammerungen habe ich eine if-Bedingung übersehen und deshalb angenommen, du hättest hier einen Fehler.
        Allzuviel Zeit hatte ich auch nicht. ;-)
        Du solltest dir eine einheitliche Schreibweise angewöhnen, damit tust du dir selbst, und allen anderen einen Gefallen, weil der Code einfach übersichtlicher wird.

        Gruß

        Kurt

        --
        "Politiker sagen das, was ankommt, und nicht das, worauf es ankommt."  (Hans-Olaf Henkel; dt. Industriemanager; geb. 1940)
        http://elektro-dunzinger.at
        http://shop.elektro-dunzinger.at
  2. Hi Schmaid!

    var StdSollzeit2 = StdSollzeit/60                         //Rechnung: Minuten in Stunden

    î-------Hier fehlt auf jeden Fall ein Semikolon.
    Auch ich bin ansonsten zu faul, mir das alles reinzuziehen.
    Probier halt mal aus, wie weit das Läuft (else auskommentieren, alerts setzen...)

    Viel Spass,
    Richard

    1. yo,

      alert("Sie sind nicht mehr in der Kernzeit!!!)

      auch hier fehlt meiner meinung nach ein semikolon.

      Ilja

  3. Hallo,

    kann mir irgend jemand erklären warum diese if-else Anweisung nicht funktionier, bzw warum es nicht durchläuft?

    Und welche der folgenden if-else Anweisungen meinst Du?
    Du weißt, dass die Fehlerbeschreibung "es funktioniert nicht" einem potentiellen Helfer nicht weiterhilft.

    if (StartStd >= 540 && StartMin >= 30 )
      {
      }
      else
      {
        if (ExtraMin <60 ) {
        }
          else {
            if (pZeit <10) {
            }
            else {
            }
          }
      }
    }

    Du solltest dir angewöhnen eine einheitliche Einrückung und Plazierung der { } in deinen Scripten zu verwenden.

    Grüße,

    Jochen

  4. kann mir irgend jemand erklären warum diese if-else Anweisung nicht funktionier, bzw warum es nicht durchläuft?

    Erstmal, if-else Bedingungen sind keine Schleifen.

    Aber an deinem Code kann ich erstmal keinen Fehler finden, was sagt den die JS Konsole von Mozilla - Fehlermeldungen? Warnungen?

    Alles in allem ist mein erster Eindruck das die Rechnungen bzw. Bedingungen unnötig komplex sind. Um mit Zeiten zu rechnen ist es immer sinnvoll diese in eine Zahl umzuwandeln und damit zu rechnen, als umständlich mit Minuten und Stunden.

    Struppi.

  5. Hi,

    if (StartStd >= 540 && StartMin >= 30 )
      {
          alert("Sie sind nicht mehr in der Kernzeit!!!)

    Du solltest die Minuten und Stunden summieren und mit der Summe arbeiten.
    So hast Du das Problem, daß z.B. 9:31 Uhr als nicht mehr in der Kernzeit gerechnet wird, 10:01 dagegen schon (da nur eine der beiden Und-Verknüpften Bedingungen zutrifft).

    cu,
    Andreas

    --
    MudGuard? Siehe http://www.mud-guard.de/