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

Simulando login e senha, ainda não entendi porque deu certo! Sempre fico preso no looping

<meta charset="utf-8">

<script>

    function pulaLinha() {

        document.write("<br");

    }

    function texto(frase){

        document.write(frase);
        pulaLinha();
    }

    var loginCadastrado = "alura";
    var senhaCadastrada = "alura321";

    var loginInformado = prompt("Informe seu login");
    var senhaInformada = prompt("Informe sua senha");

    //agora começa o real problema!!!

    var tentativaSenha = 1;
    var maximasTentativas = 3;

    while(tentativaSenha <= maximasTentativas){

        if(loginInformado == loginCadastrado && senhaInformada == senhaCadastrada){

            alert("Bem Vindo ao nosso programa ");
            tentativaSenha = maximasTentativas + 1;

        }else{

            if(tentativaSenha == maximasTentativas){

                alert("Número de tentativas excedido");

            }else{

                alert("Senha inválida." + " Digite sua senha novamente");
                var senhaInformada = prompt("Digite sua senha");
            }
        } tentativaSenha = tentativaSenha + 1; //não entendo como esse é o fator que tira do looping
    }
</script>
2 respostas
solução!

Olá Markus, beleza?

Vamos começar atacando o seu problema especificado no código rs

    //agora começa o real problema!!!

    var tentativaSenha = 1;
    var maximasTentativas = 3;

    while(tentativaSenha <= maximasTentativas){

        if(loginInformado == loginCadastrado && senhaInformada == senhaCadastrada){

            alert("Bem Vindo ao nosso programa ");
            tentativaSenha = maximasTentativas + 1;

        }else{

            if(tentativaSenha == maximasTentativas){

                alert("Número de tentativas excedido");

            }else{

                alert("Senha inválida." + " Digite sua senha novamente");
                var senhaInformada = prompt("Digite sua senha");
            }
        } tentativaSenha = tentativaSenha + 1; //não entendo como esse é o fator que tira do looping
    }

Vamos lá, o While é uma estrutura de repetição que continua até enquanto a clausula não for satisfeita, no seu caso esse trecho:

    var tentativaSenha = 1;
    var maximasTentativas = 3;

    while(tentativaSenha <= maximasTentativas)

Note que Enquanto a tentativaSenha (valor = 1) for menor ou igual ao maximasTentativas (valor = 3) realize tudo o que está dentro do Loop (iniciamos então a rotina de loop)

Vc informa seu usuário e começa a validar a senha do mesmo, correto?

Então vamos para a parte de validar a senha :

        if(loginInformado == loginCadastrado && senhaInformada == senhaCadastrada){

            alert("Bem Vindo ao nosso programa ");
            tentativaSenha = maximasTentativas + 1;

        }

Aqui é o pedaço que indica que vc acertou a senha, então note que no trecho

tentativaSenha = maximasTentativas + 1;

É adicionado ao valor de tentativaSenha o numero maximo de tentavas + 1, saindo instantaneamente do loop, pois o valor de tentativaSenha já será maior que maximasTentativas , pois adicionamos + 1 a ele na atribuição.

else{

            if(tentativaSenha == maximasTentativas){

                alert("Número de tentativas excedido");

            }else{

                alert("Senha inválida." + " Digite sua senha novamente");
                var senhaInformada = prompt("Digite sua senha");
            }
        } tentativaSenha = tentativaSenha + 1; //não entendo como esse é o fator que tira do looping
    }

Na primeira Cláusula Else do Primeiro IF temos algumas verificações internas, onde:

            if(tentativaSenha == maximasTentativas){

                alert("Número de tentativas excedido");

            }

Verifica somente se o valor da tentativaSenha é igual a maximasTentativas e exibe a mensagem caso seja.

else{

                alert("Senha inválida." + " Digite sua senha novamente");
                var senhaInformada = prompt("Digite sua senha");
            }

Ocorre caso tentativaSenhanão seja igual a maximasTentativas, repetindo o processo de pedir uma senha

Agora a sua dúvida:

tentativaSenha = tentativaSenha + 1; //não entendo como esse é o fator que tira do looping

No final de cada repetição do While, adicionamos +1 a variável tentativaSenha, ou seja, sempre que terminarmos uma execução adicionamos +1 a ela. Sendo que o limite do nosso While (para sair dele por excesso de tentativas é igual a variável maximasTentativas, que possui o valor de 3)

Então se o valor da tentativaSenha for igual ou maior que 3, nos encerramos a condição do While estabelecida lá em cima:

while(tentativaSenha <= maximasTentativas)

Encerrando o seu código

Qualquer coisa manda aqui!

Abraços

Sua explicação ficou incrível! Muito obrigado, ajudou bastante!!