JavaScript如何确保用户输入1到100之间的数字

时间:2014-04-04 23:26:02

标签: javascript arrays

您好我希望用户输入介于1和100之间的数字任何更高我希望它显示数组越界而不是将数字添加到数组这里是我拥有的它可以工作但是当你输入另一个数字它说NAN

for(var i = 0; Repeat !== 'n'; i++){
    Student.push(prompt("Enter Student Name: "));
    Mark.push(parseInt (prompt("Enter Student mark: ")));
    //Check if Mark entered is not out of bounds and gives a grade
    if (Mark[i] <0 || Mark[i] >100){
        alert("Grate out of bounds");
         Mark.splice(i);//Removes array if out of bounds
    }else if (Mark[i] >= 83){
        getGrade.push("A");
        A++;
    }else if (Mark[i] >= 70){
        getGrade.push ("B");
        B++;
    }else if (Mark[i] >= 50){
        getGrade.push ("C");
        C++;    
    }else if (Mark[i] >= 0){
        getGrade.push ("F");
        F++;
    //If mark is not a number
    }else if (isNaN(Mark)){
    alert("Must input numbers");
    }
    Repeat = prompt ("Do you want to enter another student: y/n");
}  

2 个答案:

答案 0 :(得分:0)

当您输入的值不正确时,该数组不再与i同步。例如,如果您为第一年级输入(Bob1000),请考虑在调用Mark.splice(i)后存储到变量中的内容:

Student = [Bob]
Mark = []

现在Mark为空,i已增加到1。假设您现在输入值Johnny50。你的变量看起来像这样:

Student = [Bob, Johnny]
Mark = [50]

请注意,当您的代码验证成绩时,没有Mark[1],因为数组只包含一个值,i正在查看第二个条目 - 因此NaN。此外,Student中的条目数多于Mark中的条目数。


作为一般原则,在完成所有验证逻辑之前,不应“提交”数据。因此,将输入的数量存储在临时变量中,检查它们,然后在输入数据良好后最后将它们添加到数组中:

var entryStudent = prompt("Enter Student Name: ");
var entryMark = parseInt (prompt("Enter Student mark: "));
//Check if Mark entered is not out of bounds and gives a grade
...
//Once you have determined the values are valid, add them to the array
if (valid) {
  Student.push(entryStudent);
  Mark.push(entryMark);
} else {
  // make sure i is moved back to previous entry so you don't skip one
  i--;
}

此代码不完整(例如,您需要弄清楚如何确定validtrue还是false),但它应该为您提供一般概念。

答案 1 :(得分:0)

我会建议两件事 -

  1. 让你的&#34; isNaN&#34;在任何其他检查之前检查(因此您不会插入错误的值)。

  2. 将parseInt结果存储在一个变量中,对该变量进行所有检查,并且只有当它通过时 - 将其推入 Marks 。这样你可以避免持有我的参考。

  3. 这样的事情:

    var grade, name;
    for (var i = 0; Repeat !== 'n'; i++) {
        name = prompt("Enter Student Name: ");
        grade = parseInt(prompt("Enter Student mark: "));
    
        // check if grade entered is a number
        if (isNaN(grade)) {
            alert("Must input numbers");
            continue;
        }
        // check if grade entered is not out of bounds
        if (grade < 0 || grade > 100) {
            alert("Grade out of bounds");
            continue;        
        }
        // store the data
        Student.push(name);
        Mark.push(grade);
    
        if (grade >= 83) {
            getGrade.push("A");
            A++;
        } else if (grade >= 70) {
            getGrade.push("B");
            B++;
        } else if (grade >= 50) {
            getGrade.push("C");
            C++;
        } else if (grade >= 0) {
            getGrade.push("F");
            F++;
        }
        Repeat = prompt("Do you want to enter another student: y/n");
    }
    
相关问题