2013-06-29 52 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;

請告訴我,這是否解決了您的問題。