Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
12
respostas

Criando uma função para o bloco do while

Boa noite, Gostaria de uma força se possível em uma dúvida. Seria montar uma função para while para chamar quando precisar. Desde já agradeço a força.

<meta charset="utf-8">

<script>

    function pulaLinha(){
        document.write("<br>");
    }

    function mostra(saidaTela){
        document.write(saidaTela);
        pulaLinha();
    }

    //**************************************

    function condicao(correta){
        var cond = (minhaIdade >= 1 && minhaIdade <= 130);
        return cond;
    }

    var minhaIdade = parseInt(prompt("Digite sua idade"));
    var diasAno = 365;
    var diasNaTerra = minhaIdade * diasAno;

    if (condicao()){
        mostra("Você já viveu " + diasNaTerra + " dias na terra");

    } else {
        alert("Digite um valor de 1 a 130 anos");
        /*não consigo fazer um while ou for funcional
        que, agora volte a pegar a entrada do prompt
        e reavalie tudo novamente. Tentei fazer uma função
        mas o retorno invalida a variavel minhaIdade já
        que esta fora da função.*/
    } 

</script>
12 respostas

Não entendi muito bem, você quer que faça a repetição de verificação até o usuário informar uma idade válida?

solução!

Vou dar uma dica primeiro e você tenta resolver. Aliás, resolvemos o mesmo problema durante as aulas.

Identifique a parte do código que você deseja repetir. Achou? Envolve ela em um loop (while ou for, de acordo com seu gosto). Mas lembre-se que a repetição tem que ter um limite, caso contrário o usuário ficará perguntando a vida toda.

Tente mais um pouco, pode ser? Para refrescar sua memória, sugiro dar uma assistida novamente no capítulo https://cursos.alura.com.br/course/logica-programacao-javascript-html/section/7/task/1 e que também de uma olhada neste exercício: https://cursos.alura.com.br/course/logica-programacao-javascript-html/section/7/task/19/opinion

Aguardo seu retorno!

OBS: a ideia é que você não se torna um ninja, mas um cangaceiro em lógica de programação! Então vale o esforço, porque eu quero ver você em um futuro não muito distantes nos meus treinamentos avançados de JavaScript!!!!

Creio que esse código você esteja apenas treinando para estudo mesmo, pois não é nada funcional travar o usuário um script apenas em uma condição verdadeira.

Marco, Diego esta começando no mundo da programação. O foco inicial é que ele aprenda lógica de programação.

Diego, minhas dicas ajudaram? Conseguiu fazer o que deseja ou repensou sua estratégia?

Obrigado a todos pela resposta. Professor Flávio, sim foi exatamente a section/7/task/19/opinion que acertava meu codigo.

Consegui entender legal agora toda parte de repetição e o curso esta tudo bem claro, na verdade sou eu que precipito e a solução esta a frente.

Só que agora apareceu uma conversão da minha variável idadesTerra que retorna NaN. Não entendi por que, já que minhaIdade ja foi convertida no parse e diasAno é definida já direto como Int.

Qualquer modo o passo que estava trupicando foi solucionado e obrigado Professor pela sempre presente ajuda.

<meta charset="utf-8">

<script>

    function pulaLinha(){
        document.write("<br>");
    }

    function mostra(saidaTela){
        document.write(saidaTela);
        pulaLinha();
    }

    //**************************************

    function condCorreta(correta){
        var cond = (minhaIdade >= 0 && minhaIdade <= 130);
        return cond;    
    }

    var diasAno = 365;
    var diasTerra = minhaIdade * diasAno;

    var retorno = 1;

    while (retorno <= 3){

        var minhaIdade = parseInt(prompt("Qual sua idade?"));

        if(condCorreta()){

            mostra("Você já viveu " + diasTerra + " dias na terra.");
                    //agora diasTerra passou a ser NaN
            break;

        } else {

            alert("Digite um valor de 1 a 130 anos");    
        }

        retorno++;
    } 

</script>

Diego, não encontro a variável idadesTerrano código que você postou. Se for uma nova dúvida e um novo código, peço que crie um novo post. Tudo bem?

Mas se for ainda o mesmo problema no seu código, só me esclarecer onde esta a variável idadesTerra que vemos o que acontece.

É no mesmo código, desculpa me confundi em escrever idadesTerra, o certo no código dando NaN é diasTerra.

function condCorreta(correta){
        var cond = (minhaIdade >= 0 && minhaIdade <= 130);
        return cond;    
    }

    var diasAno = 365;
    var diasTerra = minhaIdade * diasAno;

Veja que para você calcular diasTerra você precisa capturar o que o usuário digitou certo? Repare que você declarou a variável e o resultado que ela recebe fora do while!

Veja o código alterado. Só vou alterar essa questão, para que seu código funcione.


// código omitido

    while (retorno <= 3){

        var minhaIdade = parseInt(prompt("Qual sua idade?"));

        // aqui é o local correto
        var diasTerra = minhaIdade * diasAno;

        if(condCorreta()){

       // código omitido

Perfeito Professor valeu a força.

Ah sim, e pelo visto deu muito certo. Parabéns a equipe desses cursos. =)