1
resposta

Problema com o else

1-Porque se eu colocar a ordem trocada do else não funciona? 2- Porque se eu inserir a linha "tentativaAtual++; " abaixo do alert("Login inválido. Tente novamente");, porque não funciona ? Por exemplo: script>"

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

var maximoTentativas = 3;
var tentativaAtual = 1;

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; // acertou, então faço o gasto de todas as tentativas para sair do loop. Lá embaixo vai incrementar + 1! 

    } else {

        if (tentativaAtual == 3) {
            alert("Número permitido de tentativas ultrapassado!");
        } else {
            alert("Login inválido. Tente novamente");
        }
    }

   // vai para a próxima tentativa
    tentativaAtual++; // tentativaAtual++ é a mesma coisa do que tentativaAtual = tentativaAtual + 1;
}

EXEMPLO:

} else {

alert("Login inválido. Tente novamente");

tentativaAtual++; }

else {

if (tentativaAtual == 3) {

 alert("Número permitido de tentativas ultrapassado!");
        } 
    }
   // vai para a próxima tentativa

}

1 resposta

Olá Felipe, tudo bem?

Ao inverter a ordem do if else, você precisará alterar um pouco a lógica da sua condição. Não sei se eu entendi muito bem o que você quis dizer no seu enunciado, mas eu alterei a validação do seu if/else para o seguinte código e funcionou conforme o esperado:

<body>

<script type="text/javascript">

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

var maximoTentativas = 3;
var tentativaAtual = 1;

while(tentativaAtual <= maximoTentativas) {

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

    // tentativaAtual = 1
    if (tentativaAtual == 3) 
    {
            alert("Número permitido de tentativas ultrapassado!");
    } 
    else 
    {
        if(loginCadastrado == loginInformado && senhaCadastrada == senhaInformada) 
        {

                alert("Bem-vindo ao sistema, " + loginInformado);

                tentativaAtual = maximoTentativas; // acertou, então faço o gasto de todas as tentativas para sair do loop. Lá embaixo vai incrementar + 1! 
        }
        else
        {
            alert("Login inválido. Tente novamente");
        }
    } 
    // vai para a próxima tentativa
    //tentativaAtual++; // tentativaAtual++ é a mesma coisa do que tentativaAtual = tentativaAtual + 1;
    tentativaAtual++;
}

</script>

</body>

Em relação ao "tentativaAtual++ estar posicionado abaixo do alert("Login inválido. Tente novamente")", você gera um problema de escopo. O seu tentativaAtual declarado acima do while recebe o valor inicial de 1. No entanto você está checando ele somente quando ele entra no else e incrementa ele dentro da sua condicao if/else. Ao sair desta condicao, o valor volta a ser 1 e voce entrará num loop infinito, pois while tentativaAtual <= 3, ele continuará rodando. Ao implementar sua variavel tentativaAtual fora das condições if/else você estará incrementando o valor da sua variavél para que a condição do while possa ser verificada. Espero ter ajudado.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software