【问题标题】:JavaScript Find average from user inputJavaScript 从用户输入中查找平均值
【发布时间】:2014-11-19 03:05:51
【问题描述】:

我在计算 mpgTotal 时遇到问题。这应该将所有 mpgTankful 加在一起并将它们除以相加的数量(基本上是找到 mpgTankful 的平均值)。我尝试实现一个计数器,但它并没有变成我想要的样子。它应该一直计数,直到用户输入 -1 退出。

示例结果为:

里程用户输入:
加仑用户输入:
mpgTankful:
mpgTotal:(在这种情况下,mpgTankful 将除以 1)

里程用户输入:
加仑用户输入:
mpgTankful:
mpgTotal:(在这种情况下,将先前的 mpgTankful 与当前的 mpgTankful 相加并除以 2)

里程用户输入:
加仑用户输入:
mpgTankful:
mpgTotal:(在这种情况下,将第一个 mpgTankful 与第二个和当前(第三个)mpgTankful 添加并除以 3)

var miles,      //Miles driven
    gallons,    //Gallons used
    mpgTankful, //MPG this tankful
    mpgTotal,   //Total MPG 
    mi,         //Miles driven converted to integer
    gal,        //Gallons used converted to integer
    count=0,
    avg;

//Enter -1 to quit
while(miles!="-1"){

//Read in the Miles Driven from user as a String
miles=window.prompt("Enter miles (-1 to quit):");
    if(miles=="-1"){
        break;
    }

//Read in the Gallons used from user as a String
gallons=window.prompt("Enter gallons:");

//Convert numbers from Strings to Integers
mi=parseInt(miles);
gal=parseInt(gallons);

//Calculate the MPG Tankful
mpgTankful=mi/gal;

//Calculate the Total MPG
mpgTotal+=mpgTankful;
count++;

if(count!=0){
    avg=mpgTotal/count;
}
else
    avg=0;

document.writeln("avg: " + avg);

//Print Results
document.writeln("<br/><br/>Miles driven: " + mi +
                 "<br/>Gallons used: " + gal +
                 "<br/>MPG this tankful: " + mpgTankful +
                 "<br/>Total MPG: " + mpgTotal);

}

【问题讨论】:

  • 您介意在您的样本中添加一些值吗?所以我们知道了预期的输入和输出。

标签: javascript average


【解决方案1】:

你就快到了……

mpgTotal+=mpgTankful; 不能工作:第一次调用这个,mpgTotal === undefined

if(count!=0) 没用.. 你在上面增加了一行...

你计算了avg但没有输出(根据'Total MPG:'的描述):&lt;br/&gt;Total MPG: " + mpgTotal

对于这个例子,我添加了一个循环检查无效输入(在 cmets 中的解释)。

<script>
var    miles=0  //Miles driven
,    gallons=0  //Gallons used
, mpgTankful=0  //MPG this tankful
,   mpgTotal=0  //Total MPG 
,         mi=0  //Miles driven converted to integer
,        gal=0  //Gallons used converted to integer
,      count=0
,        avg=0
; // end vars

main: while(true){  //main loop, labeled 'main'
  if( (miles=prompt('Enter miles ("-1" to quit):')) === '-1' )
    break main;     //well.. plain english..
  if( isNaN(mi=parseInt(miles, 10)) ){  //check if we get a number
    alert('Please enter a number or enter "-1" to quit.');
    continue main;
  }
  while(true){
    if( (gallons=prompt('Enter gallons ("-1" to quit):')) === '-1' )
      break main; //NOT this inner loop.
    if( isNaN(gal=parseInt(gallons, 10)) ){  //check if we got a number
      alert('Please enter a number or enter "-1" to quit.');
      //no need to instruct a continue for this loop..
    } else break; //this inner loop (so we can go on with 'main' below).
  }
  
  mpgTankful=mi/gal;     //Calculate the MPG Tankful
  
  mpgTotal+=mpgTankful;  //Calculate the Total MPG
  
  avg=mpgTotal/++count;  //Calculate avg (and pre-increment count)
  
  //Print Results
  document.writeln( '<br/><br/>Miles driven: ' + mi
                  + '<br/>Gallons used: '      + gal
                  + '<br/>MPG this tankful: '  + mpgTankful
                  + '<br/>Total MPG: '         + avg
                  );
}
document.close(); //don't forget to close the body..
</script>

这应该让你开始。

【讨论】:

  • 谢谢。我想让用户输入“-1”退出循环。我尝试用“-1”替换取消并保持原来的 if(miles=="-1"){break;} ,但它不能正常工作。
  • 到此,重构完成。请注意,不使用取消(如我之前的示例)是相当违反直觉的..
  • 更新:将 Number 切换为 parseInt(因为这是您使用的并且您指定了整数)。但是,我建议您接受浮点加仑(和英里),以显着提高准确性。
猜你喜欢
  • 1970-01-01
  • 2011-11-09
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-12
相关资源
最近更新 更多