1
resposta

Contador de tentativas

O exemplo do professor coloca o contador de tentativas no final do código dentro apenas do bloco do while, pq quando coloco ele dentro do bloco do else junto com o alerta de Login invalido cai em um loop e continua pedindo login e senha?

<meta charset="UTF-8">
<script>

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

    var tentativaAtual = 1;
    var maximoTentativas = 3;

    while(tentativaAtual <=maximoTentativas){
        var loginInformado = prompt("Informe seu login");
        var senhaInformada = prompt("Informe sua senha");

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

            alert("Bem-vindo ao sistema " + loginInformado);
            tentativaAtual = maximoTentativas + 1;
        } 
        else {
             if(tentativaAtual == 3){
             alert("Você ultrapassou o número de tentativas");
            }
            else{
                alert("Login inválido. Tente novamente");
                tentativaAtual = tentativaAtual + 1;
            }
        }
    }
</script>
1 resposta

Olá Rafael. Tudo certo? Na sua solução há um pequeno detalhe que está faltando para evitar que o loop continue executando após o usuário ultrapassar o limite de tentativas.

O que está acontecendo é que quando a variável tentativaAtual atinge o valor 3, dentro do bloco if(tentativaAtual == 3) { alert("Você ultrapassou o número de tentativas"); } há apenas um alert, que é executado, sem mudar novamente o valor da variável tentativaAtual. Dessa forma, a variável segue tendo o valor 3 e enquanto o usuário continuar errando, ele sempre retornará para essa string.

Para solucionar esse problema você precisa apenas adicionar uma nova string tentativaAtual = tentativaAtual + 1;.

A diferença da solução do professor para a sua solução está nesse detalhe e no fato que ele buscou tornar o código mais sucinto. Dessa forma, ele apenas retirou a string tentativaAtual = tentativaAtual + 1 do else, transportou-a para o bloco do while e substituiu a string tentativaAtual = maximoTentativas + 1 por tentativaAtual = maximoTentativas para não entrar em conflito com a primeira string discriminada acima.

Abaixo segue o código para melhor entendimento. Qualquer dúvida estou à disposição.

<meta charset="UTF-8">
<script>

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

    var tentativaAtual = 1;
    var maximoTentativas = 3;

    while(tentativaAtual <=maximoTentativas){
        var loginInformado = prompt("Informe seu login");
        var senhaInformada = prompt("Informe sua senha");

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

            alert("Bem-vindo ao sistema " + loginInformado);
            tentativaAtual = maximoTentativas + 1;
        } 
        else {
             if(tentativaAtual == 3){
             alert("Você ultrapassou o número de tentativas");
             tentativaAtual = tentativaAtual + 1;
            }
            else{
                alert("Login inválido. Tente novamente");
                tentativaAtual = tentativaAtual + 1;
            }
        }
    }
</script>