switch语句可以在Function内部

Can switch statements be inside a Function?

本文关键字:Function 内部 语句 switch      更新时间:2023-09-26

我正试图编写一个程序,输入学生的平均值并返回:-a,如果学生的平均数为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" );

这是您的代码在稍微修复时所做的:

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不同),不能在这样的开关/用例中设置条件。这是if/else-if的任务。其次,由于您已经确定了平均值>=0和<=100,你不需要检查函数内部的那些。第三,你不需要在脚本中指定上限,你可以像上面那样一个接一个地消除这些可能性。第四,你的名字和所有那些"myAvg"单词都有冲突。

以下是您所做操作的修改版本。我把它和你做的很接近,但这就是我分解零件的方式。为了实现这一点,您还需要在html中添加一个div(我不喜欢使用"document.write"):

<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();

希望这能有所帮助。

--是否

<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>