user12066439
user12066439

Reputation:

Calculating average from array and recieving a NaN error

I'm having issues with trying to convert objects from a string array into integers. I've used parseInt and parseFloat but none of it is working. Do I need to maybe structure the array declaration differently or the prompt?

Thanks guys

var scores = [];

		document.writeln("<font face='arial' size=''><table border='1' style='border-collapse: collapse;'>")
		
		for(var i=1; i<=10; i++){
			scores[i] = prompt("Enter score " + i);
			document.writeln("<tr><td style='padding: 5px;'><b>Score " + i + "</b></td>");
			document.writeln("<td style='padding: 5px;' contenteditable='true'><center>" + scores[i] + "</center></td>");
			document.writeln("</tr>");
		}

		function Average(){
  			var sum = 0;
			for(var i = 0; i < scores.length; i++){
  	  			sum += parseInt(sum + scores[i]);
			}
			var avg = sum/scores.length;
			document.getElementById("average").innerHTML = ("Your score average is: " + avg);
		}

Upvotes: 0

Views: 664

Answers (5)

Ankit
Ankit

Reputation: 632

I did some modification in your code and also applied a check if user enter any value other than a number.

var scores = [];

    document.writeln("<font face='arial' size=''><table border='1' style='border-collapse: collapse;'>")

    for(var i=0; i<10; i++){
        scores[i] = parseFloat(prompt("Enter score " + (i+1)));
        if(isNaN(scores[i])){
          scores[i]=0;
        }
        document.writeln("<tr><td style='padding: 5px;'><b>Score " + i + "</b></td>");
        document.writeln("<td style='padding: 5px;' contenteditable='true'><center>" + scores[i] + "</center></td>");
        document.writeln("</tr>");
    }
    
    Average();
    
    function Average(){
        var sum = 0;
        for(var i = 0; i < scores.length; i++){
            sum += parseInt(scores[i]);
        }
        var avg = sum/scores.length;
       document.getElementById("average").innerHTML = ("Your score average is: " + avg);
        
    }
<div id="average"></div>

Upvotes: 0

user12066439
user12066439

Reputation:

Here's the working code:

    var scores = [];

    document.writeln("<font face='arial' size=''><table border='1' style='border-collapse: collapse;'>")

    for(var i=0; i<=9; i++){
        scores[i] = prompt("Enter score " + (i+1));
        document.writeln("<tr><td style='padding: 5px;'><b>Score " + (i + 1) + "</b></td>");
        document.writeln("<td style='padding: 5px;' contenteditable='true'><center>" + scores[i] + "</center></td>");
        document.writeln("</tr>");
    }

    function Average(){
        var sum = 0;

        for(var i = 0; i < scores.length; i++){
            sum += parseInt(scores[i], 10);
        }

        var avg = sum/scores.length;
        document.getElementById("average").innerHTML = ("Your score average is: " + avg);
    }

Thanks for the help, Andreas.

Upvotes: 0

Hemant Parashar
Hemant Parashar

Reputation: 3774

You're using the for loop for prompt from 1 to 10, but calculating the sum in Average looping 0 to 9. The scores[0] is undefined as it is never assigned a value in the prompt loop whcih results to NaN when added to other numbers. Also you're adding sum in parseInt which is wrong.

Here is the fixed code :

   var scores = [];

    document.writeln("<font face='arial' size=''><table border='1' style='border-collapse: collapse;'>")

    for(var i=0; i<10; i++){
        scores[i] = prompt("Enter score " + (i+1));
        document.writeln("<tr><td style='padding: 5px;'><b>Score " + i + "</b></td>");
        document.writeln("<td style='padding: 5px;' contenteditable='true'><center>" + scores[i] + "</center></td>");
        document.writeln("</tr>");
    }

    function Average(){
        var sum = 0;
        for(var i = 0; i < scores.length; i++){
            sum += parseInt(scores[i]);
        }
        var avg = sum/scores.length;
        document.getElementById("average").innerHTML = ("Your score average is: " + avg);
    }

Hope this helps !

Upvotes: 1

Mindstormer
Mindstormer

Reputation: 96

There are a few issues here:

  1. scores[i] = prompt("Enter score " + i);, I would exchange this for scores.push(parseInt(prompt("Enter score " + i)));, as prompt returns a string, upon which most operations will fail and return NaN. Setting scores[i] = does work, but can be messy if you try to scale it up.
  2. sum += parseInt(sum + scores[i]);, you have already got the +=, and as such the extra sum + ... effectively translates to sum = (2 * sum) + scores[i], meaning we can reduce this to sum += scores[i];

The complete code:

var scores = [];

document.writeln("<font face='arial' size=''><table border='1' style='border-collapse: collapse;'>")

for(var i=0; i<10; i++){
    scores.push(parseInt(prompt("Enter score " + i)));
    document.writeln("<tr><td style='padding: 5px;'><b>Score " + i + "</b></td>");
    document.writeln("<td style='padding: 5px;' contenteditable='true'><center>" + scores[i] + "</center></td>");
    document.writeln("</tr>");
}

function Average(){
    var sum = 0;
    for(var i = 0; i < scores.length; i++){
        sum += scores[i];
    }
    var avg = sum/scores.length;
    document.getElementById("average").innerHTML = ("Your score average is: " + avg);
}

Upvotes: 0

rprakash
rprakash

Reputation: 510

following line is wrong in your code :

scores[i] = prompt("Enter score " + i);

I have written a small piece of javascript code which will do the average calculation. What it's doing is, getting the number in a variable from the prompt and pushing it into the array.

function calAverage(){
    var sum = 0;
    for (var i = 0; i < scores.length; i++){
        sum += scores[i];
    }
    var avg = sum/scores.length;
    return avg;
}

var scores = [];
for (var i=1; i<=10; i++){
    var number = prompt("Enter score :");
    scores.push(parseInt(number));
}

console.log(scores);

var average = calAverage(scores);

console.log("Average = " + average);

Upvotes: 0

Related Questions