【问题标题】:Javascript 2nd condition not working, calculate average then change to letter gradeJavascript 第二个条件不起作用,计算平均值然后更改为字母等级
【发布时间】:2014-01-22 13:30:48
【问题描述】:

这几天我一直在努力寻找这段代码中的错误。是的,我是新手。我正在尝试计算平均值,然后将数字输出转换为字母等级。请帮忙!我的输出反映了平均值正在计算,但只有一个条件可以生成字母等级。

var courtesyVal = 0,
overallVal = 0,
i;

if (data.length) {

for (i = 0; i < data.length; i++) {

    courtesyVal += data[i].grade_courtesy;
    overallVal += data[i].grade_overall;

}

courtesyVal = (courtesyVal / data.length);
overallVal = (overallVal / data.length);

}


if (courtesyVal >= 4 || overallVal >= 4) {
courtesyVal = ("A") || overallVal("A");
} else if (courtesyVal >= 3 || overallVal >= 3) {
courtesyVal = ("B") || overallVal("B");
} else if (courtesyVal >= 2 || overallVal >= 2) {
courtesyVal = ("C") || overallVal("C");
} else if (courtesyVal >= 1 || overallVal >= 1) {
courtesyVal = ("D") || overallVal("D");
} else {
courtesyVal = ("F") || overallVal("F");
}

Appery("courtesy_grade").text(courtesyVal);
Appery("overall_grade").text(overallVal);

【问题讨论】:

    标签: javascript average


    【解决方案1】:

    代码有两个问题:一个严重,一个更微妙。

    严重的问题是您的语法将overallVal 视为一个函数。 overallVal("A") 尝试使用第一个参数'A' 调用overallVal 函数。这将导致错误。

    微妙的问题掩盖了上面的严重问题,因为您已将'A' || overallVal('A') 的值分配给courtesyVal。对你来说是幸运还是不幸,最后一部分没有被评估,所以上面提到的错误永远不会到达,'A' 被分配给courtesyVal

    解决方案

    替换:

    courtesyVal = ("A") || overallVal("A");
    

    与:

    courtesyVal = "A";
    overallVal = "A";
    

    想到一个问题,为什么要为两个变量分配相同的值?如果您想将数字等级转换为字母等级,那么您做错了。您应该为每个变量执行一次 if () elses 序列。

    更好的方法是使用一些数学函数:

    var correspondence = "FDCBAA"; // last A is for a perfect 5
    var courtesyVal = 0, overallVal = 0;    
    
    if (data.length) {
      for (var i = 0; i < data.length; i++) {
        courtesyVal += data[i].grade_courtesy;
        overallVal += data[i].grade_overall;
      }
    
      courtesyVal = (courtesyVal / data.length);
      overallVal = (overallVal / data.length);
    }
    
    courtesyVal = correspondence[Math.floor(courtesyVal)];
    overallVal = correspondence[Math.floor(overallVal)];
    

    【讨论】:

    • 成功了!在挣扎了 2 天之后,我花了 20 分钟才得到你们的修复。谢谢一百万!
    【解决方案2】:

    || 是短路的,因此如果第一个条件的计算结果为true,则不计算第二个条件。由于您正在做作业而不是条件,我认为您根本不想要||。您也可能不想像调用函数一样调用overallVal。试试这个:

    courtesyVal = "A";
    overallVal = "A";
    

    甚至更短:

    courtesyVal = overallVal = "A";
    

    【讨论】:

      【解决方案3】:

      当您分配字母等级时,您使用 OR (||) 来分隔您的作业。您需要使用由分号 (;) 分隔的 2 个单独的赋值语句。

      if (courtesyVal >= 4 || overallVal >= 4) {
          courtesyVal = "A";
          overallVal = "A";
      } 
      else if (courtesyVal >= 3 || overallVal >= 3) {
          courtesyVal = "B";
          overallVal = "B";
      } 
      else if (courtesyVal >= 2 || overallVal >= 2) {
          courtesyVal = "C";
          overallVal = "C";
      } 
      else if (courtesyVal >= 1 || overallVal >= 1) {
          courtesyVal = "D"; 
          overallVal = "D";
      } 
      else {
          courtesyVal = "F"; 
          overallVal = "F";
      }
      

      【讨论】:

        猜你喜欢
        • 2019-05-02
        • 1970-01-01
        • 1970-01-01
        • 2016-05-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多