2013-02-19 39 views
2

我爲特許學校工作,我只是在學習javascript。我有一些代碼是由以前填補我的職位的人編寫的,在我看來,它應該可行,但事實並非如此。javascript中的五個值的平均值

這是我在自定義HTML網頁在我的SIS:

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") 
} 

它應該被檢查每一個在日比分e 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,或者乾脆將所有5個號碼,並返回「通過」只有當總和是2250或更大?

+1

如果(讀< 0 && read > 1000): 至於你說你只是學習,一個技巧是,這將永遠,永遠如此。你在這裏問的是「在同一時間讀小於0,但也超過1000,」? ||應該用來代替&&。 &&表示「如果這和這個」,||意思是「如果這個,還是這個」。 ||在你的情況下,將其改爲「如果讀數小於零,或者它大於1000,則執行此操作」,這是可能的,因爲數學中的數字既不小於零也不超過1000. 注意:是shift + \鍵,並且被稱爲「管道」 – Gyhth 2013-02-19 19:28:50

+0

我認爲這就是他爲什麼這麼做的原因 - 也許他只是想確保每個值都設置爲0以開始使用?或者一個人從不這樣做? – DataBased 2013-02-19 19:36:20

+0

在那裏,它永遠不會將它設置爲零,因爲這是後面的代碼,因爲它永遠不會小於0並且大於1000,它永遠不會將它設置爲0.它是合理的如果滿足這兩個條件中的任何一個(0最小值,我認爲最大值爲1000分),那麼他希望將其設爲零,但這就是爲什麼您要使用OR(||)運算符而不是AND(&&)。 if之後的代碼,如read = 0,僅在if塊返回true時執行。閱讀< 0 && Read > 1000將永遠不會返回true,因此,它永遠不會將讀取設置爲0.與其他值相同。 – Gyhth 2013-02-19 19:39:52

回答

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") 
} 
+0

哦!謝謝!仍然沒有得到任何工作,但我可以確切地看到你在說什麼...... – DataBased 2013-02-19 19:57:36

+0

我已經爲你重新設計了你的整個功能。希望這會幫助你更多。我在解釋我爲什麼完成某些事情的過程中添加了符號,以及它應該如何幫助您找到所需的東西。如果您還有其他問題,或者仍然無法正常工作,請告訴我。 – krillgar 2013-02-19 20:10:54

+0

你們都非常美妙。在這一點上,我只能想到,也許數據庫沒有以整數形式返回這些字段的值。那可能嗎? – DataBased 2013-02-19 20:33:51

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") 
} 
+0

這不適合我 - 它消除了任何結果。抱歉! – DataBased 2013-02-19 19:35:30

+0

我在學習parseInt設置後實際上使用了這段代碼,它完美地工作 - 謝謝! – DataBased 2013-02-19 21:10:29

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。

我也創建了一個總變量,你可以像其他一切一樣檢查。

+0

嗨喬丹,這正是我想要弄清楚的 - 如何將所有五個分數的總和設置爲一個變量。謝謝你給我看。我還沒有一個積極的結果,但它可能只是我必須刷新SIS軟件中的自定義頁面緩存... ...支持... – DataBased 2013-02-19 19:44:24

+1

我非常想投票答案,幫助我學習,但顯然,我還沒有足夠的聲望點。請知道我多麼感謝你的答案 - 我真的是這個意思!你和其他幾個人幫助我掌握了一些我不明白的編程概念,我真的很感激。 – DataBased 2013-02-19 21:13:05

+0

我已upvoted您的問題。你只需要更多的聲望就可以投票。祝你好運! – Jordan 2013-02-19 22:31:05

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,則通過。

+0

謝謝你解釋這個循環是如何工作的 - 在這個代碼中的某處必須有其他錯誤。我做的沒有任何工作,並且它已經足夠長,緩存應該已經清除。我將嘗試找到他在代碼中命名每個主題的位置。 *嘆息* – DataBased 2013-02-19 20:04:03

+0

我非常想投票答案,幫助我學習,但我沒有足夠的聲望點,顯然。請知道我多麼感謝你的答案 - 我真的是這個意思!你和其他幾個人幫助我掌握了一些我不明白的編程概念,我真的很感激。 – DataBased 2013-02-19 21:09:45