我一直在努力在这段代码中找到这个bug几天。是的,我是新手。我正在尝试计算平均值,然后将数字输出转换为字母等级。请帮忙!我的输出反映了平均值正在计算,但只有一个条件正在生成字母等级。
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);
答案 0 :(得分:1)
||
正在短路,因此如果第一个条件评估为true
,则不评估第二个条件。既然你在做作业而不是条件,我认为你根本不想要||
。您也可能不希望将overallVal
称为函数。试试这个:
courtesyVal = "A";
overallVal = "A";
甚至更短:
courtesyVal = overallVal = "A";
答案 1 :(得分:1)
当您指定字母等级时,您使用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";
}
答案 2 :(得分:1)
代码有两个问题:一个是严重的,一个是微妙的。
严重的问题是您的语法将overallVal
视为一种功能。 overallVal("A")
尝试使用第一个参数overallVal
调用'A'
函数。这将导致错误。
微妙的问题会掩盖上面的严重问题,因为您已将courtesyVal
的值分配给'A' || overallVal('A')
。幸运或不幸的是,最后一部分未经评估,因此从未达到上述错误,'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)];