【问题标题】:Finding the lowest/highest number in an array using a loop使用循环查找数组中的最小/最大数字
【发布时间】:2017-04-03 23:50:12
【问题描述】:

对于我的网络开发课程,我有以下作业:

在您的老板允许在办公套件中安装可调节的恒温器之前,他必须确信不同的官员和每个办公室在不同的日子会发生重大的温度变化。您将编写一个程序,允许每位员工输入五天中每天中午的温度,并显示最高、最低和平均(平均)温度。使用 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>

【问题讨论】:

  • 几点可以帮助您入门。 1) 问题状态为Use a For loop to take the five readings,但您使用的是单独的变量。这可以在一个循环中实现。你知不知道怎么? 2)你用high覆盖alltemp中的temp1,然后用low覆盖,两者都是undefined。而你想做相反的事情。将highlow 设置为等于alltemp[0]
  • @fubar 感谢您的帮助!我能够让循环返回正确的高温和低温。但是,我不知道如何摆脱 temp1、temp2、temp3 等变量并仍然使其工作。
  • 看看我在下面发布的答案。这不是一个完整的解决方案,但它会让你开始。然后,如果您使用更新的代码编辑您的问题,我可以尝试进一步提供帮助。
  • @fubar 更新了...现在,没有所有这些变量,我不知道该怎么做才能找到平均温度。
  • 我已经回复了一个更新的答案,希望能引导您完成思考过程。如果有任何问题,请告诉我。

标签: javascript arrays loops


【解决方案1】:

第 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 来计算平均值。

【讨论】:

    【解决方案2】:

    您将 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);
    

    【讨论】:

    • danger danger will robinson low 在此处全局定义。小心你走的那些捷径!
    猜你喜欢
    • 2021-06-17
    • 2019-09-18
    • 1970-01-01
    • 2019-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多