Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Loop while retorna NaN a partir do segundo valor do Array.

Salve, meus amigos!

Estou começando meus estudos em programação, ainda na fase de lógica da programação.

O código abaixo é para executar a seguinte tarefa: pegar, através do input (id = "inputValor" no HTML) três valores numéricos, através da função insereValor, colocar esses valores no array recebeValor e depois fazer a média desses valores.

Limitei a função insereValor em 3 valores, e depois a função mediaFunc faz a média desses 3 valores.

O problema: parece que o loop (while) só retorna o primeiro valor como numérico, os outros valores surgem como isNaN = true. Ou seja, não tenho como fazer o cálculo de média, pois o resultado da NaN.

O que estou fazendo de errado? O código está abaixo. Obrigado.

<meta charset = "UTF-8">

<input id = "inputValor" />
<button id = "botaoInsere">Inserir</button>
<p id = "pegaTexto"></p>


<script type="text/javascript">

    function mediaFunc(v1, v2, v3){

        var media = parseInt((v1 + v2 + v3) / limite);

        return media;

    }


    function insereValor(){

        while(posicao < limite) {


            //pega o valor inputado no campo em branco.
            recebeValor.push(parseInt(document.getElementById("inputValor").value));

            //acrescenta uma posição no array. Ou seja, vai para a próxima posição.
            posicao++;

            inputValor.focus();
            return recebeValor;

        }

            mediaFunc();
            inputValor.focus();

    }

    var posicao = 0;
    var limite = 3;
    var recebeValor = [];

    var botaoInsere = document.getElementById('botaoInsere');
    botaoInsere.onclick = insereValor;

</script>
2 respostas
solução!

Pelo que eu vi, a função mediaFunc() recebe três parâmetros, mas, na hora de chamar, está sendo chamada sem passar nenhum. Como cada valor capturado é guardado num array, o seguinte ajuste faria o erro deixar de ocorrer:

 function mediaFunc(){
        v1 = recebeValor[0];
        v2 = recebeValor[1];
        v3 = recebeValor[2];
        var media = parseInt((v1 + v2 + v3) / limite);
        console.log(media); //Teste
        return media;

    }

Funcionou! Muito obrigado Daniel! Abs!