2017-04-11 4 views
0

Dies ist mein Code:For-Schleife speichert keine Variablen?

<html> 
<head> 
    <title>Temperature Information</title> 
</head> 
<body> 
    <script> 
    //declare variables 
     var BR = "<br />"; 
     var ES = " "; 
     var counter; 
     var temp = [counter]; 
     var max = 0; 
     var min = 0; 
     var tempTot; 
     var tempAve; 
     //loop 
     for (counter = 1; counter <= 5; counter++) { 
      tempTot = tempTot + temp[counter]; 
      temp[counter] = prompt("Enter the temperature for noon on day #" + counter,ES); 
      temp[counter] = parseFloat(temp[counter]); 
      if (temp[counter] == temp[1]){ 
       temp[counter] = max; 
       temp[counter] = min; 
      }else if (temp[counter + 1] > temp[counter] && temp[counter] != temp[1]){ 
       temp[counter] = max; 
      }else if (temp[counter + 1] < temp[counter] && temp[counter] != temp[1]){ 
       temp[counter] = min; 
      } 
      tempTot = tempTot + temp[counter]; 
     } 
     tempAve = tempTot/4; 
     //display info 
     document.write("The average temperature is: " + tempAve + BR); 
     document.write("The maximum temperature is: " + max + BR); 
     document.write("The minimum temperature is: " + min + BR); 
    </script> 
</body> 

Es soll für 5 Tage Info für die Temperatur nehmen, die mittlere Anzeige, max und min. Alles scheint gut zu laufen, aber es zeigt nur die Ergebnisse mit einer Null an. Mache ich etwas falsch? Ich habe das Gefühl, dass ich zu viel darüber nachdenke.

+0

Was 'var temp = [Zähler];' soll tun? – gsc

+0

Es gibt viele Dinge, die mit Ihrem Code nicht stimmen. – MultiplyByZer0

+3

Sie greifen auf Temperaturwerte zu, die Sie noch nicht ausgefüllt haben, über 'temp [counter + 1]'. Diese werden "undefiniert" sein, was zu "NaN" führt, wenn Sie es mit einer Zahl vergleichen. Vergleiche mit 'NaN' sind immer falsch. Darüber hinaus, obwohl es im obigen Code kein Problem verursacht, beginnen Array-Indizes bei 0, nicht bei 1. Ich empfehle, den Code im Debugger zu durchlaufen, der in Ihrem Browser eingebaut ist, zu beobachten, wie die Werte Ihrer verschiedenen Variablen sind in einem dunklen Raum die Lichter an, und es ist nicht etwas zu warten, bis später zu lernen. Anfänger brauchen Debugger. :-) –

Antwort

0

Es gibt eine Reihe kleinerer Fehler in Ihrem Code. Wenn Sie den Status browser's debugger oder console.log verwenden, können Sie herausfinden, was falsch ist. Zum Beispiel ist Ihr temp Array 0 Element undefined, wenn Sie Mathe darauf machen, passieren schlimme Dinge;). Außerdem ist es einfacher, Ihr Array zu bearbeiten, wenn Sie alle Elemente haben, anstatt es "on the fly" zu machen. Und schließlich, immer überprüfen, ob die Javascript-Bibliothek etwas für Sie tun kann (Math.min), anstatt es zu schreiben.

oh, und ich habe auch Ihren Code in seine eigene Funktion. Wenn Sie sich Ihren Code im Debugger ansehen, werden Sie feststellen, dass Ihre Variablen nun alle in einem eigenen Bereich enthalten sind, anstatt sich mit dem globalen Bereich zu vermischen.

<html> 
<head> 
    <title>Temperature Information</title> 
</head> 
<body> 
    <script> 
     var tempInformation = function() { 
     var BR = "<br />"; 
     var ES = " "; 
     var temp = []; 

     for (var counter = 0; counter < 5; counter++) { 
      var input = prompt("Enter the temperature for noon on day #" + (counter + 1), ES); 
      temp[counter] = parseFloat(input); 
     } 

     var sum = temp.reduce((previous, current) => current += previous); 
     var avg = sum/temp.length; 

     document.write("The average temperature is: " + avg + BR); 
     document.write("The maximum temperature is: " + Math.max.apply(null, temp) + BR); 
     document.write("The minimum temperature is: " + Math.min.apply(null, temp) + BR); 
     } 

     tempInformation(); 
    </script> 
</body> 
+1

Vielen Dank. Es war viel einfacher als ich dachte – Dez

Verwandte Themen