使用循环

时间:2017-04-03 23:50:12

标签: javascript arrays loops

对于我的Web开发类,我有以下任务:

在你的老板允许办公室套房内的可调恒温器之前,他必须确信在不同的日子里,不同的官员和每个办公室内都会出现主要的温度变化。您将编写一个程序,允许每个员工在五天的每一天中午输入温度,并显示最高,最低和平均(平均)温度。使用For循环获取五个读数。 (提示:将最高和最低温度变量初始化为读取的第一个温度,然后比较其他温度以查看它们是低还是高。)使用parseFloat()方法转换温度输入十进制数并将平均值显示为小数点后一位。

如何找到平均温度?

<!DOCTYPE HTML>
<html>
<body>
    <script type="text/javascript">
    var high; // highest temperature
    var low; // lowest temperature
    var avg; // average temperature

    var temperatures = [];

    for (var i = 0; i < 5; i++) {
        high = temperatures[0];
        low = temperatures[0];

        temperatures.push(parseFloat(prompt("Enter the temperature for day " + (i+1))));

        if (high < temperatures[i]) {
            high = temperatures[i]; }
        if (low > temperatures[i]) {
            low = temperatures[i]; }

    }

    document.write("The highest temperature is " + high + ".<br>");
    document.write("The lowest temperature was " + low + ".<br>");
    document.write("The average temperature was " + avg + ".");
    </script>
</body>
</html>

2 个答案:

答案 0 :(得分:0)

您将alltemp中的值设置为高或低,而不是相反。这是一个小提示,向您展示如何执行此操作(因为您必须使用for循环,但有更简洁的方法):https://jsfiddle.net/vtbahu3v/

var nums = [2, 55, 3, 87, 4, 23],
    high = low = nums[0];

for(var i = 0; i < nums.length; i++) {
    high = Math.max(high, nums[i]);
  low = Math.min(low, nums[i]);
}

alert("High is " + high);
alert("Low is " + low);

答案 1 :(得分:0)

第1步

@Emily,这里有一些东西让你开始使用for循环来收集用户输入。

var temperatures = [];

for (var i = 1; i <= 5; i++) {
    var temperature = prompt('Enter temperature for day ' + i);
    // Parse input and add it to the temperatures array
}

第2步

太棒了,所以你现在有一个由5个温度组成的数组temperatures。在下面的示例中,我将用于捕获的行拆分并将值推送到两个单独的语句中以便于阅读。如下:

var temperature = prompt('Enter the temperature for day ' + (i + 1));
temperatures.push(parseFloat(temperature));

您需要做的另一个小改动是您在循环内分配highlow值,但在将任何值推送到temperatures数组之前,所以我们需要看一下。

但首先,找到平均温度。因此,正如您所知,平均值是所有值的总和除以值的数量。在循环的每次迭代中,我们都获得下一个温度值。所以我们可以使用循环将所有这些值一起添加。如下:

var temperatures = [];
var total = 0;
var high;
var low;
var avg;

for (var i = 0; i < 5; i++) {
    // Capture, parse and append temperature to temperatures array
    var temperature = prompt('Enter the temperature for day ' + (i + 1));
    temperatures.push(parseFloat(temperature));

    // Increment total by new temperature value
    total += temperature;
}

但是highlow温度怎么样?如果我们从最新的问题更新中获取代码,则在循环的每次迭代中,highlow将重置为第一个温度,然后您将其与当前温度进行比较在循环。这不会奏效。

然而,我们可以做的是将highlow设置为非常低和非常高的值,以便用户输入的任何温度总是更高或更低。例如:

var high = Number.NEGATIVE_INFINITY;
var low = Number.POSITIVE_INFINITY;

然后在循环的每次迭代中,我们将您已编写的代码与当前温度与之前的highlow值进行比较。如下:

var temperatures = [];
var total = 0;
var high = Number.NEGATIVE_INFINITY;
var low = Number.POSITIVE_INFINITY;
var avg;

for (var i = 0; i < 5; i++) {
    // Capture, parse and append temperature to temperatures array
    var temperature = prompt('Enter the temperature for day ' + (i + 1));
    temperatures.push(parseFloat(temperature));

    // Increment total by new temperature value
    total += temperature;

    // Compare high and low temperatures
    if (high < temperature) high = temperature;
    if (low > temperature) low = temperature;
}

最后,你如何计算平均值?

// Calculate average temperature
avg = total / temperatures.length;

第3步

如果您感兴趣,可以进一步改进此代码。但这可能超出了这个问题的范围。

如果您想改进它,请查看Math.min()Math.max()apply()。我很高兴发布更多代码来说明如何使用这些代码来获取高温和低温,以及Array.prototype.reduce来计算平均值。