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

Outra forma de resolver

Na minha resolução inclui o "var senhaInformada = prompt("Informe sua senha");" depois do alerta de erro porque da maneira sugerida o browser não perguntava as 3 vezes. Resolvi da maneira abaixo, ficou correto?

<meta charset="UTF-8">

<script type="text/javascript">

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

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

    ;

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

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


    var tentativaAtual = 1;
    var maximoTentativas = 3;

    while( tentativaAtual <= maximoTentativas ) {

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

            alert("Bem-vindo ao sistema " + loginInformado); // acertou, sai do loop while porque não faz sentido continuar perguntando

            break;

        } else {

            alert("Login inválido. Tente novamente");
            var senhaInformada = prompt("Informe sua senha");

                if( tentativaAtual == 2) {
                    alert("Login bloqueado. Contate o administrador do sistema.");
                    break;
                }
        }

    tentativaAtual++;

    }

</script>
7 respostas

Ola Walter,

2 observações:

1) Não é necessário declarar a variável "senhaInformada" dentro do "else".

2) Se o usuario errar tanto o "usuário" quanto a "senha" por mais que ele digite a senha correta não ira funcionar/entrar no sistema. É necessário pedir para o usuário digitar novamente os dois dados e não somente a senha.

Tente realizar as alterações e mande novamente para a gente.

:)

Da forma que está o programa vai acabar tendo algumas inconsistências.

O momento que o programa pergunta o usuário e a senha deve ser dentro do loop, a primeira instrução dentro dele, não precisa perguntar a senha dentro do else.

E aquele if para lançar a mensagem de login bloqueado deve testar se "tentativaAtual" é igual a 3 e não igual 2, porque se mantiver dessa forma vai surgir a mensagem de bloqueio no segundo erro seguido do usuário.

Obrigado pelo retorno Fabio! Sobre o ponto 1) Se eu não colocar o prompt pedindo o login/senha dentro do else, onde seria correto para ele perguntar novamente? Sobre o 2) alterei o código de forma que ele pergunte o login e a senha quando digitar o código errado, mas ainda coloquei o prompt dentro do else. Está funcionando, e bloqueia na terceira tentativa:

<meta charset="UTF-8">

<script type="text/javascript">

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

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

    ;

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

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


    var tentativaAtual = 1;
    var maximoTentativas = 3;

    while( tentativaAtual <= maximoTentativas ) {

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

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

            break;

        } else {

            alert("Login inválido. Tente novamente");
            var loginInformado = prompt("Informe seu login");
            var senhaInformada = prompt("Informe sua senha");

                if( tentativaAtual == 2) {
                    alert("Login bloqueado. Contate o administrador do sistema.");
                    break;
                }
        }

    tentativaAtual++;

    }

</script>

Obrigado pela resposta Victor! Ficou estranho, mas com o "2" ali ele pergunta as 3 vezes antes de bloquear a senha, não entendi o porque.

solução!

Acho que agora entendi o que vocês queriam dizer, olhando o exemplo do professor o prompt fica dentro do while mas antes do if. Alterei o código e acredito que agora está como vocês sugeriram, inclusive o número de tentativas pra mostrar a mensagem de bloqueio agora fica certo (3 tentativas):

<meta charset="UTF-8">

<script type="text/javascript">

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

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

    ;

    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);

            break;

        } else {

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

                if( tentativaAtual == 3) {
                    alert("Login bloqueado. Contate o administrador do sistema.");
                    break;
                }
        }

    tentativaAtual++;

    }

</script>

Olá...o que significa (tentativaAtual++)? E por que ele tem que ir no final do código?

<meta charset="UTF-8">

<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 foço o gasto de todas as tentativas para sair do loop. Lá embaixo vai incrementar + 1! 

        } else {

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

        tentativaAtual++; // vai para a próxima tentativa

    }

Oi Fabio, O "tentativaAtual++" incrementa a variável "tentativaAtual" em 1 quantidade, saindo de 0 até que ela chegue a 3, quando ela será igual a "maximoTentativas" e eu terei esgotado minhas chances de acertar a senha. Ela vai no final porque eu só posso incrementar essa variável depois de ter rodado o meu "if", já que se eu acertar a senha o "if" interrompe as tentativas e se eu errar ele me deixa tentar outra vez, mas antes de ir pra próxima tentativa o comando "tentativaAtual++" diz pro código que eu já gastei uma tentativa das 3 que tenho. Por isso ele vai depois. Espero ter ajudado. Abs.

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