javascript中五个值的平均值
我在一所特许学校工作,我正在学习javascript。我有一些代码是由以前担任我的职位的人编写的,在我看来,它应该是有效的,但事实并非如此 这是我在我的SIS中的自定义HTML页面中的内容:javascript中五个值的平均值,javascript,average,Javascript,Average,我在一所特许学校工作,我正在学习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_sci
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>
GED状态:gedCheck(“~(ELC)科学州考试分数)”,“~(ELC)科学州考试分数)”,~(soc)科学州考试分数)
这似乎正确地从各种DB字段中检索了值,因为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" )
}
函数gedCheck(读取、wri、数学、sci、soc){
如果(读取<0&&读取>1000)
read=0;
如果(wri<0&&wri>1000)
wri=0;
如果(数学<0&&math>1000)
数学=0;
如果(sci<0&&read>1000)
read=0;
如果(soc<0&&soc>1000)
soc=0;
如果((读>=410)和&(wri>=410)和&(数学>=410)和&(sci>=410)和&(soc>=410)){
如果(读取+wri+数学+sci+soc>=2250)
文件。写入(“通过”)
}
其他的
文件。写入(“未通过”)
}
应该检查GED测试中的每个分数至少为410,所有分数的总和至少为2250。然而,它并没有达到最后一部分。如果所有分数都超过410,则返回“通过”
我试过了,但也没用
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" )
}
函数gedCheck(读取、wri、数学、sci、soc){
如果(读取<0&&读取>1000)
read=0;
如果(wri<0&&wri>1000)
wri=0;
如果(数学<0&&math>1000)
数学=0;
如果(sci<0&&read>1000)
read=0;
如果(soc<0&&soc>1000)
soc=0;
如果((读>=410)和&(wri>=410)和&(数学>=410)和&(sci>=410)和&(soc>=410)){
如果(读取+wri+数学+sci+soc/5>=450)
文件。写入(“通过”)
}
其他的
文件。写入(“未通过”)
}
有人能帮我解决这个问题吗?如果平均值为450,那么它要么对所有5个数字进行平均,然后返回“通过”,要么简单地将所有5个数字相加,然后返回“通过”,如果总和为2250或更大,那么返回“通过”?怎么办
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" )
}
要获得平均值,您需要执行以下操作:
(((read + wri + math + sci + soc) / 5) > 450)
加法周围的括号确保将所有分数之和除以5。按照现在的方式,您只需将soc
分数除以5
编辑(重写整个方法):
函数gedCheck(读取、wri、数学、sci、soc){
//正如前面所说的,这些都应该是ORs
//如果分数小于0或大于1000
如果(读取<0 | |读取>1000){
read=0;
}
if(wri<0 | | wri>1000){//为了绝对清晰起见,我更喜欢在所有if/else语句周围加括号
wri=0;
}
如果(数学<0 | |数学>1000){
数学=0;
}
如果(sci<0 | |读取>1000){
read=0;
}
如果(soc<0 | | soc>1000){
soc=0;
}
如果(阅读>=410&&//,那么这样做只会让学生及格
如果满足所有条件,wri>=410&&//。
数学>=410&&
sci>=410&&
soc>=410&&
((read+wri+math+sci+soc)>=2250 | |//为了清晰起见,将更多内容分隔开
((读+wri+数学+sci+soc)/5)>450){
//要么全部得分超过2250分
//或者所有5名学生的平均成绩都超过450分
文件。写入(“通过”)
}
其他的
文件。写入(“未通过”)
}
功能gedCheck(读取、wri、数学、sci、soc){
如果(读取<0 | |读取>1000)
read=0;
如果(wri<0 | | wri>1000)
wri=0;
如果(数学<0&&math>1000)
数学=0;
如果(sci<0&&read>1000)
read=0;
如果(soc<0&&soc>1000)
soc=0;
var总计=读取+wri+数学+sci+soc;
如果(read>=410&&wri>=410&&math>=410&&sci>=410&&soc>=410&&total>=2250){
文件。书写(“通过”);
}否则{
文件。填写(“未通过”);
}
}
整个第一部分都是不可能的代码。它正在检查一个数字是否既小于零又大于1000。显然不可能,所以我把它改为使用或
我还创建了一个total变量,您可以用与其他所有变量相同的方式进行检查。在此处使用数组将帮助您减少重复代码的数量
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");
}
}
函数gedCheck(读取、wri、数学、sci、soc){
var受试者,总分,平均分;
科目=[阅读、wri、数学、sci、soc];
总分=0;
平均得分=0;
对于(变量i=0;i1000){
受试者[i]=0;
}
总分+=受试者[i];
};
averageScore=总分/受试者长度;
如果(平均得分>=450 | |总得分>=2250){
文件。书写(“通过”);
}否则{
文件。填写(“未通过”);
}
}
第一个循环遍历每个主题,并在必要时将其设置为零,然后将其添加到总分变量中
然后根据受试者的数量平均总分
然后,如果平均分数等于或大于450,或等于或大于2250,则通过。if(读<0&&read>1000):正如你所说,你只是在学习,提示是永远不会这样。这里你要问的是,“在同一时间读取的数据是否小于0,但也大于1000?”,应该使用| |而不是&&&意思是“如果这个和这个”,意思是“如果这个,或者这个”在您的例子中,将其更改为“如果读取值小于零,或大于1000,请执行此操作”,这是可能的,因为数学中没有任何数字同时小于零,但大于1000。注意:|是shift+\key,被称为“管道”,我想这就是他这么做的原因-也许他只是想确保每个值都设置为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");
}
}
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");
}
}