简体   繁体   English

循环不中断(JavaScript)?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM