2

我在一所特许学校工作,我只是在学习 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”,或者仅当总和为 2250 或更大时才将所有 5 个数字相加并返回“PASSED”?

4

4 回答 4

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" )
}
于 2013-02-19T19:24:20.583 回答
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" )
}
于 2013-02-19T19:26:51.520 回答
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。

我还创建了一个总变量,您可以像检查其他所有内容一样检查它。

于 2013-02-19T19:28:13.860 回答
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,则通过。

于 2013-02-19T19:40:10.297 回答