-4

生徒の成績表を表示するプログラムを作成します。教師は、課題の数に基づいてプロンプトから成績を入力します ( g <=課題; ループ内)。そこで、成績を平均して文字の成績を表示するようにしています。現在、「スコアが定義されていません」というエラーが発生しています。理由がわからない。JSFiddle はそれが完全に有効であると言っていますが、何が問題なのかわかりません。

更新 ありがとう、var score = 0; 修正しました...しかし、5回ループするように指定しても、ループは1回しか機能しません。

ここに私のフィドルがあります: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);
4

4 に答える 4

4

parseInt は、数値を読み取ることができない場合、"NaN" を返します。false をテストしていますが、これは正しくありません。ifに失敗することはありませんelse。「NaN」を true と評価し、期待とは異なることを行います。したがって、テストではなく「NaN」をテストする必要がありtrue/falseます。

また、スコアを宣言し、最初に 0 に設定する必要があります。

于 2013-06-29T05:19:05.650 に答える
1

var score = 0;未定義であると言っていて、他の場所で宣言していない場合も同様に試してください(そのコードでは宣言していません)。

score +=最初の反復で、「undefined」+=0 を undefined0 に連結しようとします。

于 2013-06-29T05:20:28.587 に答える
1

スコアを累積するために使用する前に、変数「スコア」を定義する必要があります。

var score = 0;
于 2013-06-29T05:20:39.183 に答える
0

for ループを 5 回実行するには、変数の割り当てを 5 にする必要があります。これを確認しましたか?

コードalert(String(assignments)); で確認できます。 割り当てが 5 でない場合は、 var 割り当て = 5;

と言って、何かを行う必要があります。

これで問題が解決したかどうか教えてください。

于 2013-06-29T06:22:19.187 に答える