【问题标题】:calculating average using for loop in javascript在javascript中使用for循环计算平均值
【发布时间】:2012-01-27 10:39:34
【问题描述】:
function averageCalculator (numvalues) {

    for(i=0, i <= numvalues, i++>) {
    var score = prompt("input the score")
    result1 += score;

    }

    alert(result1 / 3);
}

此功能稍后由带有onclick="averageCalculator (2)的按钮触发

<input type="button" value="Click for the average" onclick="averageCalculator (2)">

任何想法为什么它不起作用?它应该提示您输入 2 个值,然后用平均值提醒您。不知道怎么回事。

【问题讨论】:

  • 现在发生了什么?错误答案或代码未执行?
  • 您可能希望将警报更改为alert(result1 / numvalues);
  • 我得到 ReferenceError: averageCalculator 没有定义所以代码没有执行。似乎被定义为一个函数...不确定

标签: javascript function average


【解决方案1】:

您的代码存在多个问题。 for 循环的格式不正确,您需要用分号终止语句。您还需要声明变量。你的循环将运行 numvalues+1 次,这就是我在你的循环中删除 = 的原因。此外,如果你想计算一个平均值,你想除以 numvalues。

function averageCalculator (numvalues) {
var result1 = 0;
for(i=0; i < numvalues; i++) {    
    var score = prompt("input the score");   
    result1 += score;    
}
alert(result1 / numvalues);
}

除了无效语法之外,您还会在此处遇到 javascript 的常见“问题”。输入被视为字符串,而不是被添加它们将被连接起来。提供 2 和 2 作为分数将得到 11。2 与 2 = 22 / 2 = 11 连接。在将它们相加之前,您需要将值显式转换为数字:

function averageCalculator (numvalues) {
var result1 = 0;
for(i=0; i < numvalues; i++) {    
    var score = prompt("input the score");   
    result1 += Number(score);    
}
alert(result1 / numvalues);
}

以上代码将正确返回 2

【讨论】:

  • 请不要使用 boxed 值!取而代之的是Number(n) 使用+n!如果您确定字符串包含一个数字,那么这是正确的方法。否则你可以parseInt(n)它或parseFloat(n)
【解决方案2】:

你的for循环语法错误:

for(i=0, i <= numvalues, i++>) {

应该是

for(i=0; i <= numvalues; i++) {

提示:另外,最好使用

for(var i=0; i <= numvalues; i++) {

从那时起,i 将成为局部变量而不是全局变量。

【讨论】:

  • U r right JW... 和 nic 还编辑了@richard 提到的 alert() 部分
【解决方案3】:

这样试试

for(var i=0; i

【讨论】:

    【解决方案4】:

    另一种解决方案(使用函数式编程库,例如 Underscore.js):

    function averageCalculator(numValues) {
        var numbers = _.map(_.range(numValues), function(element) {
            return +prompt('input the score');
        });
    
        var result = _.reduce(numbers, function(memo, number) {
            return memo + number;
        }, memo);
    
        alert(result / 3);
    }
    

    虽然有点复杂(效率较低),但您将完全摆脱循环。

    编辑

    +prompt('input the score') 的效果与Number(prompt('input the score')) 相同。

    【讨论】:

      猜你喜欢
      • 2016-12-22
      • 2021-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-02
      • 1970-01-01
      相关资源
      最近更新 更多