我在特许学校工作,而我只是在学习javascript。我有一些由以前填补我职位的人编写的代码,在我看来它应该有效,但事实并非如此。
这就是我在SIS的自定义HTML页面中所拥有的内容:
GED Status: <script language="Javascript">gedCheck('~(ELC_tspp_GED_read_score)','~ (ELC_tspp_GED_wri_score)','~(ELC_tspp_math_GED_score)','~(ELC_science_state_exam_score)','~(soc_sci_state_exam_score)')</script>
这似乎是正确地从各个数据库字段中检索值,因为javascript例程正在评估每个值以确保它至少为410.但这就是它... ...
这是javascript例程代码:
function gedCheck(read,wri,math,sci,soc) {
if( read < 0 && read > 1000 )
read = 0;
if( wri < 0 && wri > 1000 )
wri = 0;
if( math < 0 && math > 1000 )
math = 0;
if( sci < 0 && read > 1000 )
read = 0;
if( soc < 0 && soc > 1000 )
soc = 0;
if ( (read >= 410) && (wri >= 410) && (math >= 410) && (sci >= 410) && (soc >= 410) ) {
if( read+wri+math+sci+soc >= 2250 )
document.write( "PASSED" )
}
else
document.write( "NOT PASSED" )
}
应该检查GED测试中的每个分数是否至少为410,并且所有分数的总和应该至少为2250.但是,它没有达到最后一部分。如果所有分数都超过410,它就会返回“PASSED”。
我尝试了这个,但它也不起作用。
function gedCheck(read,wri,math,sci,soc) {
if( read < 0 && read > 1000 )
read = 0;
if( wri < 0 && wri > 1000 )
wri = 0;
if( math < 0 && math > 1000 )
math = 0;
if( sci < 0 && read > 1000 )
read = 0;
if( soc < 0 && soc > 1000 )
soc = 0;
if ( (read >= 410) && (wri >= 410) && (math >= 410) && (sci >= 410) && (soc >= 410) ) {
if( read+wri+math+sci+soc/5 >= 450 )
document.write( "PASSED" )
}
else
document.write( "NOT PASSED" )
}
请有人帮我解决这个问题所以要么平均所有5个数字并且只有平均值为450才返回“PASSED”,或者只是添加所有5个数字并且只有当总和为2250或更大时才返回“PASSED” ?
答案 0 :(得分:0)
怎么样?
if ((read >= 410) &&
(wri >= 410) &&
(math >= 410) &&
(sci >= 410) &&
(soc >= 410) &&
(read+wri+math+sci+soc >= 2250)) {
document.write( "PASSED" )
} else {
document.write( "NOT PASSED" )
}
答案 1 :(得分:0)
要获得平均值,您需要这样做:
(((read + wri + math + sci + soc) / 5) > 450)
添加的括号确保您将所有分数的总和除以5.现在的方式,您只需将soc
分数除以5。
编辑(重写整个方法):
function gedCheck(read, wri, math, sci, soc) {
// As was said before, these should all be ORs
// If the score is less than 0, OR greater than 1000
if( read < 0 || read > 1000 ) {
read = 0;
}
if( wri < 0 || wri > 1000 ) { // I prefer to put the braces around all if/else statements just for absolute clarity
wri = 0;
}
if( math < 0 || math > 1000 ) {
math = 0;
}
if( sci < 0 || read > 1000 ) {
read = 0;
}
if( soc < 0 || soc > 1000 ) {
soc = 0;
}
if ( read >= 410 && // Doing this will only pass the student
wri >= 410 && // if ALL of the conditions are met.
math >= 410 &&
sci >= 410 &&
soc >= 410 &&
( (read + wri + math + sci + soc) >= 2250 || // Separated more for clarity
((read + wri + math + sci + soc) / 5) > 450) ) {
// Either all scores total over 2250
// Or the average of all 5 are over 450 to pass
document.write( "PASSED" )
}
else
document.write( "NOT PASSED" )
}
答案 2 :(得分:0)
function gedCheck(read, wri, math, sci, soc) {
if( read < 0 || read > 1000 )
read = 0;
if( wri < 0 || wri > 1000 )
wri = 0;
if( math < 0 && math > 1000 )
math = 0;
if( sci < 0 && read > 1000 )
read = 0;
if( soc < 0 && soc > 1000 )
soc = 0;
var total = read + wri + math + sci + soc;
if (read >= 410 && wri >= 410 && math >= 410 && sci >= 410 && soc >= 410 && total >= 2250) {
document.write("PASSED");
} else {
document.write("NOT PASSED");
}
}
整个第一部分是不可能的代码。它正在检查一个数字是否小于零且大于1000.显然不可能,所以我改为使用OR。
我还创建了一个总变量,您可以像查看其他所有内容一样进行检查。
答案 3 :(得分:0)
在此处使用数组将帮助您减少重复代码的数量
function gedCheck(read, wri, math, sci, soc) {
var subjects, totalScore, averageScore;
subjects = [read, wri, math, sci, soc];
totalScore = 0;
averageScore = 0;
for (var i = 0; i < subjects.length; i++) {
if (subjects[i] < 0 || subjects[i] > 1000) {
subjects[i] = 0;
}
totalScore += subjects[i];
};
averageScore = totalScore / subjects.length;
if (averageScore >= 450 || totalScore >= 2250) {
document.write("PASSED");
} else {
document.write("NOT PASSED");
}
}
第一个循环遍历每个主题并在必要时将其设置为零,然后将其添加到总分数变量中。
然后根据受试者的数量对总分进行平均。
然后,如果平均分数等于或大于450,或等于或大于2250,则通过。