Jazzy663
Jazzy663

Reputation: 105

Find the sum of a Javascript array and divide by its length

I'm almost embarrassed to ask this.

I'm a beginner programmer, and Javascript is very confusing to me. I managed to put together this much with the help of my instructor, but there are some simple things I can't get right.

I tried search Stack Overflow for a thread that would answer my question, but all of them I've seen contain code that I haven't learned about yet, so they're all just gibberish to me.

What I'm trying to do is add all the values of an Array and divide the sum by the array's length, ergo, find the average. The description of the assignment is find the average of any number of students' grades.

My two problems are

  1. I can't figure out how to get the sum of all numeric values in the Array and,
  2. For some reason, array.length returns one more than the actual length of the Array, even if I add a -1. (ex. if I enter 6 values, the array.length would return 7.)

I know where the problem is but I can't figure out what I need to enter. This assignment is due tomorrow, so anyone's time and effort is appreciated.

Here is my script:

<script type="text/javascript">
    var allGrades = new Array();
    var g = 0;
    var l = 0;
    var s = 0;
    var t = 0;
    do {
        allGrades[g] = window.prompt("Please enter one grade for each window. After you enter a grade, enter an 'x' to see the average of the grades you entered.", "")
        g++;
    }
     while (allGrades[g - 1] != "x")
     for (l = 0; l < allGrades.length - 1; l++) {
        s += allGrades[l] // Where I think the problem is
    }
    t == s / g - 1;
    g == allGrades.length - 1; //
    window.alert(g)
     switch (t) {
        case (t >= 90):
            window.alert("Your average grade is " + (t) + ". " + "This is an A.")
            break;
        case (t >= 80 && t < 90):
            window.alert("Your average grade is " + (t) + ". " + "This is a B.")
            break;
        case (t >= 70 && t < 80):
            window.alert("Your average grade is " + (t) + ". " + "This is a C.")
            break;
        case (t >= 60 && t < 70):
            window.alert("Your average grade is " + (t) + ". " + "This is a D.")
            break;
        case (t <= 60):
            window.alert("Your average grade is " + (t) + ". " + "This is a failing grade.")
            break;
    }
</script>

I'm sorry if what I'm asking seems dumb. I've only been taking web programming for about two months, so I could really use some help!

Kyle

Upvotes: 3

Views: 1669

Answers (2)

Blender
Blender

Reputation: 298432

== is the comparison operator. You need to use the assignment operator (=) here:

t==s/g-1; 

And the lines near it.

Also, for your own sake, do not use single-letter variable names unless you have a good reason for doing so.

Here's a cleaner way of writing the script:

var grades = [];

do {
    var input = window.prompt("Please enter one grade for each window. After you enter a grade, enter an 'x' to see the average of the grades you entered.", "");

    grades.push(parseFloat(input));
} while (input != 'x');

var sum = 0;

for (int i = 0; i < grades.length; i++) {
    sum += grades[l];
}

var average = (sum / grades.length) * 100;
var grade;

if (average >= 90) {
    grade = 'A';
} else if (average >= 80) {
    grade = 'B';
} else if (average >= 70) {
    grade = 'C';
} else if (average >= 60) {
    grade = 'D';
} else {
    grade = 'failing grade';
}

alert('Your average grade is ' + average + '. ' + 'This is a ' + grade);

Upvotes: 1

Hanky Panky
Hanky Panky

Reputation: 46900

t==s/g-1; 
    g==allGrades.length-1; //

Are both Comparisons, for assignment they should be

t=s/g-1; 
    g=allGrades.length-1; 

Upvotes: 0

Related Questions