私はクラス名、クラス時間、クラス等級を受け入れるユーザGPAを画面に表示するコードを書こうとしています。私は多くのことをテストし、グローバル変数を削除しましたが、変数を書き直さないように最善を尽くしましたが、NaN
以外のものを返すようには思えません。私はコードdocument.getElementById('output').innerHTML = finalGPA;
を試して結果をプリントアウトし、parseInt
とparseString
としましたが、まだ動作させることができませんでした。私はGPAの結果を印刷したいと思います。私はすでに助けられており、コードは現在機能しています。javascript関数がNaNを返すのはなぜですか?
function calculate(classesTable) {
\t var table = document.getElementById(classesTable);
\t var rowCount = table.rows.length;
\t var classStack = [];
\t var creditStack = [];
\t var gradeStack = [];
\t for(var r = 0; r < rowCount; r++) {
\t \t for(var c = 0; c <= 2; c++) {
\t \t \t if(c == 0) {
\t \t \t \t classStack.push(table.rows[r].cells[c].children[0].value);
\t \t \t }
\t \t \t if(c == 1) {
\t \t \t \t creditStack.push(table.rows[r].cells[c].children[0].value);
\t \t \t }
\t \t \t if(c == 2) {
\t \t \t \t gradeStack.push(table.rows[r].cells[c].children[0].value);
\t \t \t }
\t \t } \t
\t }
\t var finalGPA = 0;
\t var totalCreditPoints = 0;
\t var totalHours = 0;
\t var letterGrade = " ";
\t var tempHours = 0;
\t var tempCreditPoints = 0;
\t for(var z = 0; z < rowCount; z++) {
\t \t letterGrade = gradeStack[z];
\t \t if(letterGrade == "A") {
\t \t \t tempHours = creditStack[z];
\t \t \t tempCreditPoints = 4;
\t \t \t totalCreditPoints += (tempHours * tempCreditPoints);
\t \t \t totalHours += creditStack[z];
\t \t }
\t \t if(letterGrade == "B") {
\t \t \t tempHours = creditStack[z];
\t \t \t tempCreditPoints = 3;
\t \t \t totalCreditPoints += (tempHours * tempCreditPoints);
\t \t \t totalHours += creditStack[z];
\t \t }
\t \t if(letterGrade == "C") {
\t \t \t tempHours = creditStack[z];
\t \t \t tempCreditPoints = 2;
\t \t \t totalCreditPoints += (tempHours * tempCreditPoints);
\t \t \t totalHours += creditStack[z];
\t \t }
\t \t if(letterGrade == "D") {
\t \t \t tempHours = creditStack[z];
\t \t \t tempCreditPoints = 1;
\t \t \t totalCreditPoints += (tempHours * tempCreditPoints);
\t \t \t totalHours += creditStack[z];
\t \t }
\t \t if(letterGrade == "F" || letterGrade == "I") {
\t \t \t tempHours = creditStack[z];
\t \t \t tempCreditPoints = 0;
\t \t \t totalCreditPoints += (tempHours * tempCreditPoints);
\t \t \t totalHours += creditStack[z];
\t \t }
\t \t if(letterGrade == "W") {
\t \t \t tempHours = creditStack[z];
\t \t \t tempCreditPoints = 0;
\t \t \t totalCreditPoints += (tempHours * tempCreditPoints);
\t \t \t creditStack[z];
\t \t }
\t }
\t finalGPA = totalCreditPoints/totalHours;
\t alert(finalGPA);
\t return finalGPA;
}
<table id='classesTable' class="table table-bordered">
<tr>
<td><input type="text" placeholder="Class Name" name="txtbox[]" /></td>
<td><input type="text" placeholder="Number of Hours" name="txtbox[]" /></td>
<td><input type="text" placeholder="Grade Recieved" name="txtbox[]" /></td>
</tr>
</table>
<input type="button" value="Add New Row" onclick="addRow('classesTable')" />
<input type="button" value="Remove Last Row" onclick="removeRow('classesTable')" />
<input type="button" value="Calculate GPA" onclick="calculate('classesTable')" />
<hr />
Google Chromeデバッガを使用し、ブレークポイントを使用することをお勧めします。 – JoshYates1980
まあ、 'calculate( 'classesTable')'は、引数1でcalculateを呼び出します。 calculateは6つの引数をとります。指定されていない引数は 'undefined'になります。それは...誤った使い方のようです。 –
@cevinBが 'rowCount'と' table'を述べたものに、calculate関数では定義されていないので、最後に 'alert(finalGPA);を実行したとき' actlayyは 'alert(0/0)'を実行してNaN –