2013-06-29 116 views
-4

制作一个程序来显示学生成绩表。教师根据分配次数从提示中输入分数(g < =分配;循环中)。所以我正在做这件事,所以它一起平均分数,并显示Letter级别。现在,我收到一个错误,说“分数没有定义”。不知道为什么。 JSFiddle说这是完全有效的,我不知道什么是错的。Javascript parseInt error

UPDATE 感谢球员,VAR得分= 0;固定它......但我的循环现在只能工作一次,即使我指定它循环5次。

这里是我的FIDDLE:http://jsfiddle.net/ndSMa/

// second table row begin 
    var rowtwo = document.createElement("tr"); 
    var student = document.createElement("td"); 
    var studentprompt = prompt("What is the student's name?"); 
    var studenttext = document.createTextNode(studentprompt); 
    student.appendChild(studenttext); 
    rowtwo.appendChild(student); 




    for (var g = 1; g <= assignments; g++) { 
     while (!grade) { 
      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 (parseInt(grade, 10)) { 
       // accumulate score 
       score += parseInt(grade, 10); 
       var totalscore = score/assignments; 

      } 
      // grade is not a number 
      else grade = undefined; 
     } 



     if (score >= 94) { 
      var acolumn = document.createElement("td"); 
      var atext = document.createTextNode("A"); 
      totalcolumn.appendChild(atext); 
      rowtwo.appendChild(acolumn); 
     } else if (score >= 90) { 
      var aminuscolumn = document.createElement("td"); 
      var aminustext = document.createTextNode("A-"); 
      totalcolumn.appendChild(aminustext); 
      rowtwo.appendChild(aminuscolumn); 
     } else if (score >= 87) { 
      var bpluscolumn = document.createElement("td"); 
      var bplustext = document.createTextNode("B+"); 
      totalcolumn.appendChild(bplustext); 
      rowtwo.appendChild(bpluscolumn); 
     } else if (score >= 84) { 
      var bcolumn = document.createElement("td"); 
      var btext = document.createTextNode("B"); 
      totalcolumn.appendChild(btext); 
      rowtwo.appendChild(bcolumn); 
     } else if (score >= 80) { 
      var bminuscolumn = document.createElement("td"); 
      var bminustext = document.createTextNode("B-"); 
      totalcolumn.appendChild(bminustext); 
      rowtwo.appendChild(bminuscolumn); 
     } else if (score >= 77) { 
      var cpluscolumn = document.createElement("td"); 
      var cplustext = document.createTextNode("C+"); 
      totalcolumn.appendChild(cplustext); 
      rowtwo.appendChild(cpluscolumn); 
     } else if (score >= 74) { 
      var ccolumn = document.createElement("td"); 
      var ctext = document.createTextNode("C"); 
      totalcolumn.appendChild(ctext); 
      rowtwo.appendChild(ccolumn); 
     } else if (score >= 70) { 
      var cminuscolumn = document.createElement("td"); 
      var cminustext = document.createTextNode("C-"); 
      totalcolumn.appendChild(cminustext); 
      rowtwo.appendChild(cminuscolumn); 
     } else if (score >= 67) { 
      var dpluscolumn = document.createElement("td"); 
      var dplustext = document.createTextNode("D+"); 
      totalcolumn.appendChild(dplustext); 
      rowtwo.appendChild(dpluscolumn); 
     } else if (score >= 64) { 
      var dcolumn = document.createElement("td"); 
      var dtext = document.createTextNode("D"); 
      totalcolumn.appendChild(dtext); 
      rowtwo.appendChild(dcolumn); 
     } else if (score >= 60) { 
      var dminuscolumn = document.createElement("td"); 
      var dminustext = document.createTextNode("D-"); 
      totalcolumn.appendChild(dminustext); 
      rowtwo.appendChild(dminuscolumn); 
     } else if (score < 60) { 
      var fcolumn = document.createElement("td"); 
      var ftext = document.createTextNode("F"); 
      totalcolumn.appendChild(ftext); 
      rowtwo.appendChild(fcolumn); 
     } 
    } 

    tableBody.appendChild(rowtwo); 
+0

我没有看到'score'的变量声明。这是否包括其他地方?如果没有,您是否尝试添加一个声明?la'var score = 0;'在您的示例顶部? – GotDibbs

回答

4

parseInt函数返回 “南”,当它不能读取数。你测试它是错误的,这是不正确的。您的if不会失败到else。它会评估“NaN”为真,并做一些你期望以外的事情。所以你需要在你的测试中测试“NaN”而不是true/false

此外,您还需要声明分数并将其设置为0。

1

尝试var score = 0;以及如果它说它未定义,并且您还没有在别处声明它(您没有在该代码中)。

在第一次循环score +=将尝试拼接“未定义” + = 0〜undefined0

1

必须使用它来累积积分前定义变量“分数”。

var score = 0; 
0

如果你想让你的for循环工作5次,变量赋值需要是5.你检查过吗?您可以通过代码

alert(String(assignments))来检查它;

如果赋值不是5,则必须通过说

var assignments = 5;

请告诉我,这是否解决了您的问题。