views:

82

answers:

3

My coding for JavaScript is not working and I can't figure out why. Can someone look it over and tell me what I am overlooking?

This is for my JavaScript assignment the link below is the assignment. Every time I have attempted to run the coding, it opens up to a blank page. But I can't see where my error(s) are. All I need is for someone to quickly read it and tell me what I can do to make it function.

https://docs.google.com/fileview?id=16uNNiooLalkm1QlszrqEPr2qqMGLjhrtQx7qCLw-7d2ftygre8GM6hyceJHj&hl=en

<html>
<head>
<body>
<script language="JavaScript">
<!--
var classCtr;
var nmAnswer;
var clsGrade;
var totalvalue;
var gpatotalvalue;
gpatotalvalue = 0;
totalvalue = 0;
// set up one dimensional array
var class = new Array();
classnm = 0;

do
{
  // start columns in second dimension of the array
  class[classCtr] = new Array();

 // get values from user and put in array
 class[classCtr][0] = prompt ("Enter Class Name");
 class[classCtr][1] = prompt ("Enter grade recieved");
 class[classCtr][2] = {"A":4,"B":3,"C":2,"D":1,"F":0}[class[classCtr][1]];
 class[classCtr][3] = prompt ("Enter credit hours")


 // accumulate the total value
 totalvalue = totalvalue + parseFloat(class[classCtr][3]);

 // add one to the total number of cars
 classCtr++;
 totalvalue = totalvalue + parseFloat(class[classCtr][2]);
 nmAnswer = prompt ("Do you have more classes");
} while (nmAnswer == "yes");

  // set variable that is used as counter
 clsGrade = 0;

 // print out header for content
 document.write("<H2 align='center'>Grade Point Average</H2><br>");
 document.write("<table bgcolor='Grey' align='center' border='1' cellpadding='4' width='75%'>");
 document.write("<tr>");
 document.write("<td>Class Name</td><td align='center'>Class Grade</td><td align='center'>Grade Credit</td>");
 document.write("</tr>");

// Loop through array displaying html and javascript values in the array
while (clsGrade < classnm)
  {
  document.write("<tr>");
  document.write("<td>");
  document.write (class[classCtr][0]);
  document.write("</td>");
  document.write("<td align='center'>");
  document.write (class[classCtr][1]);
  document.write("</td>");
  document.write("<td align='center'>");
  document.write (class[classCtr][3]);
  document.write("</td>");
  document.write("</tr>");

  document.write("</td>");


  // increment the counter
   clsGrade++;
  }

// finish the table of data and display the total value
document.write("</Table>");
document.write("<br>");
document.write("<table bgcolor='grey' align='center' border='1' cellpadding='4' width='75%'>");
document.write("<tr>");
document.write("<td>Total value</td><td align='center'>" + totalvalue + "</td>");
document.write("</tr>");
document.write("<tr>");
document.write("<td>GPA</td><td align='center'>" + gpatotalvalue + "</td>");
document.write("</tr>");
document.write("</Table>");


 //-->
</script>
</font></body>
</html>
+2  A: 

classnm is never set to anything other than 0...

ck
I did set classnm to 0 ...?
kHuynh
Yeah, I think the author possibly changed the code to put the user values into the "class" Array and never changed the old logic.
Andir
@kHuynh: Yeah, you set it to 0, but it never changes after that. classGrade == 0 and classNm == 0 so your while loop is never run because 0 is not less than 0.
Andir
@kHuynh - yeah, you set it to 0, but then you enter a loop with this: `while (clsGrade < classnm)` which will not execute unless clsGrade is less than 0...
ck
Oh.. Well thank you
kHuynh
+2  A: 

I ran your code in Firefox with the Firebug extension installed. It reported the following error.

class[classCtr] is undefined on Line 34

Line 34 is the following:

totalvalue = totalvalue + parseFloat(class[classCtr][2]);

This error is occurring because you increment classCtr on the previous line, so the call to class[classCtr] attempts to access something that hasn't yet been defined.

Also, classCtr isn't assigned an initial value, so will have the value unassigned. The first set of values will therefore be stored in classCtr[undefined].

You'll need to initialize classCtr when it is declared and then increment it after you've finished handling each class.

Phil Ross
Yet another reason to have everyone develop with firebug! I missed that in my first glance, but there's one problem.
Andir
The problem lies before that line though: class[classCtr] = new Array(); is like saying class["undefined"] = new Array();
Andir
What do you suggest I should use instead in order to make it valid?
kHuynh
+2  A: 

class is a javascript reserved word, rename all "class" to something else. E.g. "myClass"

Renaming "class" should make your code work, but I still see many minimal errors in your code like unclosed "head" tag, use of uninitialized variable, etc. Suggest you review it thoroughly.

Manny