billy maze
billy maze

Reputation: 1

how to combine elements of array into one alert box at the end

I have a program that calculates students percentages in a class and need the final output to all be in one box. however my program currently does on alert box for each student how do I fix this?

here is the code

<script>
function studentName(x)
{
    while(x == '' || x >= 0 || x < 0)
    {
        if(x == '')
        {
            x = prompt('Cannot leave field blank. Enter again');
        }

        else if (x >= 0)
        {
            x = prompt('Cannot Enter a number. Enter again')
        }

        else
        {
            x = prompt('Cannot Enter a number. Enter again')
        }

    }
    return(x)
} 


function studentScore(y)
{
    while(y == '' || y > 100 || y < 0 || isNaN(y))
    {

        if (y == '')
        {
            y = parseFloat(prompt("Cannot leave field, blank please enter students score"));
        }

        else if (y > 100 || y < 0)
        {
            y = parseFloat(prompt("Invalid score, please enter a score 0-100"));
        }

        else
        {
            y = parseFloat(prompt("Invalid score, please enter a score 0-100"));
        }

    }
    return(y)
}


function another(z)
{
    while(z == '' && z != 'n' && z != 'N' && z != 'y' && z != 'Y')
    {
    while (z == '' && z != 'n' && z != 'N' && z != 'y' && z != 'Y' )
         {
            z = prompt('Invalid response, would you like to enter another score Y/N ')
         }


    while(z == 'n' || z == 'N')
        {
            Z = prompt('Would you like to enter another student')
        }

    while (z == 'y' || z == 'Y')
        {
            z = prompt("Enter another score")
        }
    }



    return(z)
}

var names = []  
var scores = []
var redo = true
var anotherName
var redo2
var retry = true
var anotherScore
var retry2
var i = 0
var a = 1
var score = 0
    while(redo == true)
    {
        var studentNames = prompt('Enter student name');
                var name = studentName(studentNames);
                names.push(name)
        while(retry == true)
        {
            var studentScores = parseFloat(prompt('Enter student score'));
            score = score + studentScore(studentScores);

            retry = prompt('Enter another score? Y/N');
            retry = another(retry);                   /**/
            if(retry == 'y' || retry == 'Y')
            {
                retry = true
                a++
            }
            else if(retry == 'n' || retry == 'N')
            {
                retry = false
            }
        }
        score = score / a
        scores[i] = score
        redo = prompt('Enter another student? Y/N');
        redo = another(redo);                            /**/

        if(redo == 'y' || redo == 'Y')
        {
            redo = true
            retry = true
            i++;
            a = 1
            score = 0
        }
        else if(redo == 'n' || redo == 'N')
        {
            redo = false
        } 
    }
    var message = ""
    for(y=0; y < names.length; y++)
    {
        alert(names[y] + " - " + scores[y]);
    }

again I have a program that calculates students percentages in a class and need the final output to all be in one box. however my program currently does on alert box for each student how do i fix this and get all of the students names into one final alert box?

Upvotes: 0

Views: 204

Answers (1)

Addis
Addis

Reputation: 2530

You are getting separate alerts because you're calling alert on every iteration with individual values. One solution could be to combine the names and the corresponding scores in a new array and call alert once on this array. Using join('\n') on the new array will convert the array elements to string and separate each array elements with new line, for the sake of formatting. Just change the last part with:

let roster = [];
for(let y=0; y < names.length; y++) {
    roster.push(names[y] + " - " + scores[y]);
}
alert(roster.join('\n'))

Better yet if you save names and scores in one array from the beginning, like the roster. In this way you could avoid additional iteration at the end.

Upvotes: 1

Related Questions