out of the unexpected program

Asked

Viewed 30 times

0

Hello, I am doing this following program to show the average of the players' scores, the name of the player who got the lowest score and the one who got the highest score:

<script>
    var jogador;

    var i;
    var usuario_resposta;
    var media;
    var jogador_com_menor_pontuacao;
    var jogador_com_maior_pontuacao;
    var nomes_dos_jogadores_com_menor_pontuacao;
    var nomes_dos_jogadores_com_maior_pontuacao;
    var soma;


    i = 1;
    soma = 0;
    media = 0; 
    pontuação_dos_jogadores = 0;

        while(i<5){
            jogador = {nome: prompt("Digite o" +  '<b> nome </b>' +  "do " + i + "- jogador: "), pontuação: parseInt(prompt("Digite a" +  '<b> pontuação </b>' +  "do " + i + "- jogador: "))};
            if(jogador.pontuação > jogador_com_maior_pontuacao){
                jogador_com_maior_pontuacao = jogador.pontuação;
            }

            if(jogador.pontuação < jogador_com_menor_pontuacao){
                jogador_com_menor_pontuacao = jogador.pontuação;
            }
            if( (jogador.pontuação == jogador_com_menor_pontuacao) ){
                nomes_dos_jogadores_com_menor_pontuacao = jogador.nome;
            }


            if( (jogador.pontuação == jogador_com_maior_pontuacao) ){
                nomes_dos_jogadores_com_maior_pontuacao = jogador.nome;
            }




            soma = soma + jogador.pontuação;
            media = soma/4;
            i++;
        }
        document.write("O nome do jogador que obteve a menor pontuação foi: " + nomes_dos_jogadores_com_menor_pontuacao );

        document.write("<br>");
        document.write("O nome do jogador que obteve a maior pontuação foi: " + nomes_dos_jogadores_com_maior_pontuacao );

        document.write("<br>");
        document.write("A media das pontuações dos jogadores é: " + media.toFixed(2));








</script>

However, the program is showing the following output:

The name of the player who got the lowest score was: Undefined

The name of the player who got the highest score was: Undefined

Average player scores are: 7.00

If I’m not mistaken the logic is more or less like this,

Thanks

1 answer

0

The problem is he’s never getting in if

if(jogador.pontuação > jogador_com_maior_pontuacao)
{ 
   /// ... 
}
if(jogador.pontuação < jogador_com_menor_pontuacao)
{ 
   /// ... 
}

This is happening because it has no value to compare in the variables jogador_com_maior_pontuacao and jogador_com_menor_pontuacao.

A possible solution:

var jogador;

var i;
var usuario_resposta;
var media;
var jogador_com_menor_pontuacao = null; // <- colocar um valor
var jogador_com_maior_pontuacao = null; // <- colocar um valor
var nomes_dos_jogadores_com_menor_pontuacao;
var nomes_dos_jogadores_com_maior_pontuacao;
var soma;


i = 1;
soma = 0;
media = 0; 
pontuação_dos_jogadores = 0;

while(i<3){
//      ^ mudei para diminuir a quantidade de teste
    jogador = {nome: prompt("Digite o" +  '<b> nome </b>' +  "do " + i + "- jogador: "), pontuação: parseInt(prompt("Digite a" +  '<b> pontuação </b>' +  "do " + i + "- jogador: "))};
    if( jogador_com_maior_pontuacao === null || jogador.pontuação > jogador_com_maior_pontuacao){
    //   ^ verifica se o valor e nulo,
    //      essa checagem tambem poderia se se `i` == `primeira interação`
    //      ou seja a primeira vez ele vai entrar aqui.
        jogador_com_maior_pontuacao = jogador.pontuação;
    }

    if( jogador_com_menor_pontuacao === null || jogador.pontuação < jogador_com_menor_pontuacao){
    //   ^ verifica se o valor e nulo,
    //      essa checagem tambem poderia se se `i` == `primeira interação`
    //      ou seja a primeira vez ele vai entrar aqui.
        jogador_com_menor_pontuacao = jogador.pontuação;
    }
    if( (jogador.pontuação == jogador_com_menor_pontuacao) ){
        nomes_dos_jogadores_com_menor_pontuacao = jogador.nome;
    }


    if( (jogador.pontuação == jogador_com_maior_pontuacao) ){
        nomes_dos_jogadores_com_maior_pontuacao = jogador.nome;
    }

    soma = soma + jogador.pontuação;
    // media = soma/4;   <- coloquei fora fo while
    i++;
}

media = soma/(i - 1); // mudei para ser a quantidade de interações `-1` 

document.write("O nome do jogador que obteve a menor pontuação foi: " + nomes_dos_jogadores_com_menor_pontuacao );

document.write("<br>");
document.write("O nome do jogador que obteve a maior pontuação foi: " + nomes_dos_jogadores_com_maior_pontuacao );

document.write("<br>");
document.write("A media das pontuações dos jogadores é: " + media.toFixed(2));

Browser other questions tagged

You are not signed in. Login or sign up in order to post.