好吧所以我假设接受一系列成绩然后计算GPA。它不断出现“楠”,我忘了如何改变...我也不认为我的GPA变量是正确的。 “该函数必须包含一个包含字母等级数组的参数(例如,[”A +“,”A-“,”C“,”B-“,”A“]) 功能必须找到当前的GPA“
var letter = "";
var GPA;
function calculateTotalGPA(letter) {
var counter = 0;
for (var i = 0; i < letter.length; i++) {
if (letter == "A+") {
GPA = 4;
counter++;
}
if (letter == "A") {
GPA = 4;
counter++;
}
if (letter == "A-") {
GPA = 3.67;
counter++;
}
if (letter == "B+") {
GPA = 3.33;
counter++;
}
if (letter == "B") {
GPA = 3;
counter++;
}
if (letter == "B-") {
GPA = 2.67;
counter++;
}
if (letter == "C+") {
GPA = 2.33;
counter++;
}
if (letter == "C") {
GPA = 2;
counter++;
}
if (letter == "C-") {
GPA = 1.67;
counter++;
}
if (letter == "D") {
GPA = 1;
counter++;
}
if (letter == "F") {
GPA = 0;
counter++;
}
}
return (GPA / counter);
}
答案 0 :(得分:0)
有更好的方法来编写这段代码,但我认为显示当前代码的错误更有用,而不是建议完全不同的东西。
在if语句中,您正在检查letter
是否等于字符串,但letter
是一个字符串数组,因此您要检查您的索引i
处的元素循环。
即。变化
if (letter == "A+") {
到
if (letter[i] == "A+") {
您希望在除以counter
之前计算总GPA点数,但目前您在每次迭代时重置GPA。
变化
GPA = 4;
到
GPA = GPA + 4;
或简写
GPA += 4;
在进入for循环
之前也初始化变量 var GPA = 0;
正如评论中所提到的,您可以采取其他措施来优化代码。
答案 1 :(得分:0)
请允许我提出一些建议,首先我在for
声明中没有看到这一点,但它与计算无关。变量letter
和GPA
的范围似乎很奇怪,这些2超出了计算函数的范围,可能最好在计算函数中移动至少GPA
声明。< / p>
关于计算函数本身,我的建议是创建一个JSON对象,并像一个&#34; Dictionaries&#34;一样使用它,就像一个key
value
对象,例如:< / p>
var GPAs = {
"A" : 4,"A-":3.67,"B+":3.33,"B":3,"B-":2.67,"C+":2.33,"C":2,"C-":1.67,"D":1,"F":0
};
然后您可以使用letter
:
var GPA = GPAs[letter] ;
您的整个功能将如下所示:
function calculateGPA(letter) {
var GPAs = {
"A" : 4,"A-":3.67,"B+":3.33,"B":3,"B-":2.67,"C+":2.33,"C":2,"C-":1.67,"D":1,"F":0
};
return GPAs[letter];
}
要从数组中获取总数,有多种方法可以实现此目的,其中一种方法是使用Array.prototype.reduce
,例如:
["A", "A"].reduce(function(a,letter){
a=a+calculateGPA(letter); return a;
},0);
将calculateGPATotal
函数简化为:
function calculateGPATotal(arrayOfLetters){
var GPAs = {
"A" : 4,"A-":3.67,"B+":3.33,"B":3,"B-":2.67,"C+":2.33,"C":2,"C-":1.67,"D":1,"F":0
};
return arrayOfLetters.reduce(function(a,letter){ a=a+GPAs[letter]; return a;},0) / arrayOfLetters.length;
}
请注意,我使用的是arrayOfLetters.length
而不是counter
,这似乎是出于同样的目的。