【问题标题】:Keep prompting in loop on false if condition如果条件为假,则继续在循环中提示
【发布时间】:2013-06-29 12:10:48
【问题描述】:

我正在制作一个程序,教师输入学生的姓名和与一定数量的作业相对应的成绩(教师指定作业)。

我想让它成为输入成绩的数字值。所以,我添加了这段代码:

for (var g = 1; g <= assignments; g++) {
     var grade = prompt("Please enter the student score for assignment" + g + ".");
     if(typeof grade === 'number' && Math.Round(grade) % 1 == 0) {
             return true;
         } 
     else{ 
             var grade = prompt("Please enter the student score for assignment" + g + ".");

         }

         var gradecolumn = document.createElement("td");
         var gradetext = document.createTextNode(grade);
         gradecolumn.appendChild(gradetext);
         rowtwo.appendChild(gradecolumn);
    }

我把它记下来了……但我想让它继续提示,直到用户输入有效的数据类型。

我遇到的另一个问题是我想将成绩加在一起输入后并计算累积成绩以指定某个评分等级上的字母成绩...我知道我要去通过多条件 if/else if 语句分配字母等级。但我不确定在输入成绩后如何调用成绩,以及如何将它们加在一起,以便我可以将结果输入到多条件部分。

任何帮助将不胜感激。另外,我是否应该使用 parseInt 来解决这些问题?

【问题讨论】:

  • 某事(任何整数)模 1 始终为 0
  • 将提示放入while循环,当你的条件为假时,再次提示。
  • 也许 if(parseInt(grade)) ... 而不是 if(typeof Grade === 'number' && Math.Round(grade) % 1 == 0) 可以完成这项工作跨度>

标签: javascript


【解决方案1】:
var range = {"A": 100, "B": 75, "C": 50, "D": 30, "E": 20, "F": 10}, score = 0;
for (var g = 1; g <= 3; g++) {
    var grade = undefined, letter = '';
    while (!grade) {
        var grade = prompt("Please enter the student score for assignment" + g + ".");
        if (parseInt(grade)) {
            // accumulate score
            score += parseInt(grade);
        }
        // grade is not a number
        else grade = undefined;
    }
}
// check for mark
for (key in range) {
    if (score<range[key]) letter = key;
}

if (!letter) alert("score "+score+" is out of range!");
else {
    alert(letter); // now you have it
}

演示也更新了:http://jsfiddle.net/vladkras/jNg2m/2/

【讨论】:

  • 也许你不是想在第二行创建一个全局变量
  • 我想让它累积......所以如果老师说有 6 个作业,他/她输入 6 个不同的值。最后,我想将所有这些值平均在一起,然后分配一个字母。
  • so score += parseInt(grade);是什么积累呢?我如何将其除以分配的数量?在循环中说我有 g
  • 我不确定,我明白你的意思,但你可以尝试在第一行定义 score = [],并将累积更改为 score[g] += parseInt(grade)
【解决方案2】:

试试这个:

var g = 1;
var assignments = 5;
var done = false;
var grade, gradecolumn, gradetext;

while (!done)
{
    grade = prompt("Please enter the student score for assignment " + g + ".");
    if((grade+'').search(/^[0-9]{1,3}$/) > -1) 
    {
        gradecolumn = document.createElement("td");
        gradetext = document.createTextNode(grade);
         gradecolumn.appendChild(gradetext);
         rowtwo.appendChild(gradecolumn);

         // increment the counter
         g++;
         if (g > assignments)
         {
            done = true;
         }
    }
    else
    {
        alert('Please enter a valid score for assignment '+g+'.');
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-30
    • 2021-08-02
    • 2022-07-07
    • 1970-01-01
    • 2021-02-07
    • 2014-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多