[英]Loop not breaking (Javascript)?
I'm trying to write a simple program with JavaScript that takes in a number 1 - 100 and displays it with it's letter grade as compared to the American standard of grading. 我正在尝试使用JavaScript编写一个简单的程序,该程序接受1-100的数字,并与美国的评分标准相比,以字母的等级显示它。 (<50 = F, 60 - 69 = D, 70 = 79 = C, etc...).
(<50 = F,60-69 = D,70 = 79 = C等)。 I am having an issue where the script doesn't register the "STOP" command I put into it and instead, takes it as an invalid input.
我遇到了一个问题,该脚本未注册我放入其中的“ STOP”命令,而是将其视为无效输入。 I want to use "STOP" to break out of the loop and any other NaN entry to throw an Error.
我想使用“ STOP”中断循环,并使用其他任何NaN条目引发错误。 Here is my code:
这是我的代码:
var entry;
var letterGrade;
while(true) {
entry = prompt("Enter number grade from 0 through 100\n" +
"Or enter STOP to end entries", "STOP");
entry = parseInt(entry);
// derive and display the letter grade
if(isNaN(entry)){
if(entry === "STOP"){
letterGrade = 'Q';
}
else{
letterGrade = 'N';
}
}
else if(entry < 0 || entry > 100){
letterGrade = "ERROR";
}
else if(entry < 60){
letterGrade = 'F';
}
else if(entry > 59 && entry < 70){
letterGrade = 'D';
}
else if(entry > 69 && entry < 80){
letterGrade = 'C';
}
else if(entry > 79 && entry < 90){
letterGrade = 'B';
}
else{
letterGrade = 'A';
}
if(letterGrade == 'Q'){
break;
}
else if(letterGrade == 'N'){
alert("ERROR #002: Entry is not a number");
}
else if(letterGrade != "ERROR"){
alert("Number grade = " + entry + "\n"
+ "Letter grade = " + letterGrade);
}
else{
alert("ERROR #001: Invalid Entry");
}
}
entry = prompt("Enter number grade from 0 through 100\n" +
"Or enter STOP to end entries", "STOP");
entry = parseInt(entry);
You can't have it both a string value and an integer. 您不能同时拥有字符串值和整数。 Since you reassign entry as an int (or attempt to):
由于您将条目重新分配为int(或尝试):
if(isNaN(entry)){
if(entry === "STOP"){
Will never match. 永远不会匹配。 You need to rearrange things as such:
您需要这样重新排列:
var entry;
var letterGrade;
while(true) {
entry = prompt("Enter number grade from 0 through 100\n" +
"Or enter STOP to end entries", "STOP");
// derive and display the letter grade
if(isNaN(entry)){
if(entry === "STOP"){
letterGrade = 'Q';
}
else{
letterGrade = 'N';
}
}
entry = parseInt(entry); // parse to int here
if(entry < 0 || entry > 100){
letterGrade = "ERROR";
}
else if(entry < 60){
letterGrade = 'F';
}
else if(entry > 59 && entry < 70){
letterGrade = 'D';
}
else if(entry > 69 && entry < 80){
letterGrade = 'C';
}
else if(entry > 79 && entry < 90){
letterGrade = 'B';
}
else{
letterGrade = 'A';
}
if(letterGrade == 'Q')
break;
}
It would be far better practice to use a recursive function here: 最好在此处使用递归函数:
function enterGrade() {
// All your other code above and below next line as it is above
if(!isNan(entry)) enterGrade();
}
I can add a bit more code if you don't get what I'm trying to explain. 如果您不明白我要解释的内容,我可以再添加一些代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.