2015-11-07 93 views
-1

我想寫一個程序,輸入學生的平均水平,並返回: - 如果學生的平均水平是90-100 - B如果學生的平均水平是80-89 - C如果學生的平均水平是70-90 - D如果學生的平均數是60-69 - E如果學生的平均數是0-59 - 如果平均數不在0和100之間,則顯示「無效輸入」。可以在一個函數內切換語句嗎?

首先,應該要求用戶輸入學生的平均值,驗證平均值(=值應該在1 -100之間),然後: - 如果有效,調用一個函數來確定並返回A,B,C, D或E取決於平均值。 - 如果平均值無效或用戶按下取消按鈕,則顯示警告消息並退出程序。

這是到目前爲止我的代碼:

var myAvg = prompt("Please enter your grade percentage",0) 

if (isNaN(myAvg) || myAvg < 1 || myAvg > 100) { 
    alert("Average must be a percentage value. Please re-enter your grade again."); 
} 

function myAvg (gradeA,gradeB,gradeC,gradeD,gradeE) { 

    switch (true) { 

    case (myAvg >= 90 && myAvg < 100): 
     document.write("Your grade is an myAvg<br />"); 
     document.write(gradeA + " "); 
     break; 

    case (myAvg >= 80 && myAvg < 89): 
     document.write("Your grade is an myAvg<br />"); 
     break; 

    case (myAvg >= 70 && myAvg < 79): 
     document.write("Your grade is an myAvg<br />"); 
     break; 

    case (myAvg >= 60 && myAvg < 69): 
     document.write("Your grade is an myAvg<br />"); 
     break; 

    case (myAvg >= 0 && myAvg < 59): 
     document.write("Your grade is an myAvg<br />"); 
     break; 

    default: document.write("Please enter a valid percentage<br />"); 

    } 
} 

myAvg("gradeA", "B", "C", "D", "E"); 
+0

是的,你可以有一個switch語句在函數中。 – lurker

+1

這是使用switch語句的錯誤方法。如果使用if/else – epascarello

+0

是的,開關塊可以進入功能。儘管如此,你可以簡化你的案例。例如,case(myAvg> = 90 && myAvg <100)可以寫爲case(myAvg> = 90),因爲您已經檢查它不能大於100. – rby

回答

0

這是當定了一點你的代碼做什麼:

function myAvg (average, gradeA,gradeB,gradeC,gradeD,gradeE) { switch (true) { 
    document.write("Your grade is an average<br />"); 
    if (average >= 90){ 
     document.write(gradeA + " "); 
    } else if (average >= 80){ 
     document.write(gradeB + " "); 
    } else if (average >= 70){ 
     document.write(gradeC + " "); 
    } else if (average >= 60){ 
     document.write(gradeD + " "); 
    } else { 
     document.write(gradeE + " "); 
    } 
} 

var average = prompt("Please enter your grade percentage",0) 
if (isNaN(average) || average < 0 || average > 100) { 
    alert("Average must be a percentage value. Please re-enter your grade again."); 
} else { 
    myAvg(average, "A", "B", "C", "D", "E"); 
} 

你可以有一個函數內部switch語句,是的,但你沒有正確使用它。在Javascript中(與Perl,Ruby或者Python不同),你不能把條件放在switch/case這樣的內部。這是if/else的一項任務。其次,由於您已經確定平均值> = 0且< = 100,因此您不需要檢查函數內部的那些值。第三,你不需要在腳本中指定較高的範圍,你可以像上面一樣逐個消除可能性。第四,你的名字與所有這些「myAvg」字都有衝突。

+1

Python沒有'switch'或者任何遠程類似的東西(最接近的是一個「dict」,其值是可以針對每個情況調用的函數,並且這更像C,具有直接的相等性檢查,而不是有條件的評估)。 – ShadowRanger

+0

我寫了「也許」好東西...... – djvs

0

下面是你正在做的修改版本。我保持與你正在做的很接近,但這是我如何打破這些部分。爲了使這項工作,你還需要在HTML中添加一個div(我不喜歡使用「文件撰寫」):

<div id="message"></div> 

您可以替換一部分,如果你想,雖然。有更好的方法來與其他庫做一堆這些作品,但這應該可以幫助你。

function getGrade(score, grades) { 
     grades = grades || [ 
      { 
       min: 90, 
       grade: 'A' 
      }, 
      { 
       min: 80, 
       grade: 'B' 
      }, 
      { 
       min: 70, 
       grade: 'C' 
      }, 
      { 
       min: 60, 
       grade: 'D' 
      }, 
      { 
       min: 0, 
       grade: 'F' 
      } 
     ]; 
     for (var i in grades.length) { 
      if (score >= grades[i].min) return grades[i].grade; 
     } 
     return; 
    } 

    function showGrade(score) { 
     var grade = getGrade(score); 
     document.getElementById('message').innerHTML = "Your grade is: " + grade; 
    } 

    function getScore() { 
     var score = prompt("Please enter your grade percentage", 0); 
     if (isNaN(score) || score < 0) { 
      alert("Average must be a percentage value. Please re-enter your grade percentage."); 
      getScore(); 
     } else { 
      showGrade(score); 
     } 
    } 
    getScore(); 

希望這會有所幫助。

--Will

0
<script type= "javascript/text"> 

function averageGrade(myAvg) 
{ 
    if (myAvg >= 90) 
    { 
     return alert("Your average is an A"); 
    } 
    else if (myAvg >=80) 
    { 
     return alert("Your average is an B"); 
    } 
    else if (myAvg >=70) 
    { 
     return alert("Your average is an C"); 
    } 
    else if (myAvg >=60) 
    { 
     return alert("Your average is an D"); 
    } 
    else if (myAvg >=0) 
    { 
     return alert("Your average is an E"); 
    } 
} 

var myAvg = prompt("Please enter your average",0); 

averageGrade(myAvg) 

</script> 
相關問題