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

JavaScript如何确保用户输入1到100之间的数字,javascript,arrays,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

您好,我希望用户输入一个介于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");
}  
for(变量i=0;重复!='n';i++){
push(提示(“输入学生姓名”);
Mark.push(parseInt(提示(“输入学生标记”));
//检查输入的分数是否超出范围并给出分数
如果(标记[i]100){
警惕(“超出界限”);
Mark.splice(i);//如果超出范围,则删除数组
}否则如果(标记[i]>=83){
getGrade.push(“A”);
A++;
}否则如果(标记[i]>=70){
getGrade.push(“B”);
B++;
}否则,如果(标记[i]>=50){
getGrade.push(“C”);
C++;
}如果(标记[i]>=0),则为else{
getGrade.push(“F”);
F++;
//如果马克不是一个数字
}否则,如果(isNaN(标记)){
警报(“必须输入数字”);
}
Repeat=提示(“您想输入另一个学生:是/否”);
}  

当您输入不正确的值时,阵列将不再与
i
同步。例如,如果你输入(<代码>鲍伯< /代码>和<代码> 1000 /代码>)一年级,考虑在调用<代码>马克之后,将哪些变量存储在变量中。 现在,
Mark
为空,
i
已增加到
1
。假设您现在输入值
Johnny
50
。您的变量如下所示:

Student = [Bob, Johnny]
Mark = [50]
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");
}
请注意,当代码验证成绩时,没有
标记[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--;
}

此代码不完整(例如,您需要找出如何确定
有效
是否为
),但它应该给您一个大致的想法。

我建议两件事-

  • 在进行任何其他检查之前先进行“isNaN”检查(这样就不会插入错误的值)

  • 将parseInt结果存储在一个变量中,对该变量进行所有检查,并且只有当它通过时,才将其推入标记中。这样可以避免持有i引用

  • 大概是这样的:

    Student = [Bob, Johnny]
    Mark = [50]
    
    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");
    }
    
    var等级、名称;
    对于(变量i=0;重复!='n';i++){
    name=提示(“输入学生姓名:”);
    成绩=parseInt(提示(“输入学生分数”);
    //检查输入的等级是否为数字
    if(伊斯南(等级)){
    警报(“必须输入数字”);
    持续
    }
    //检查输入的成绩是否超出范围
    如果(等级<0 | |等级>100){
    警戒(“等级越界”);
    持续
    }
    //存储数据
    学生推送(姓名);
    标记。推(级);
    如果(等级>=83){
    getGrade.push(“A”);
    A++;
    }否则,如果(等级>=70){
    getGrade.push(“B”);
    B++;
    }否则,如果(等级>=50){
    getGrade.push(“C”);
    C++;
    }否则,如果(等级>=0){
    getGrade.push(“F”);
    F++;
    }
    Repeat=提示(“您想输入另一个学生:是/否”);
    }
    
    它在哪里显示“南”?NAN怎么说?我输入了一个超出范围的数字,它会将其删除,然后我会输入一个数字,显示“必须输入数字”,您当前正在对数组对象调用
    isNan(标记)
    ,而不是输入的特定标记。我想你的意思是isNan(Mark[I])。哇,谢谢你这么说,我真不敢相信我竟然不知道