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

Eu fiz de um modo diferênte.

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

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

    var tentativas = 1;

    while(tentativas <= 3 && loginCadastrado != loginInformado && senhaCadastrada != senhaInformada){ 
    //Eu encerrei o loop quando a pessoa colocar a senha correta ou suas tentativas terem acabado.

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


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

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

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

        tentativas = tentativas + 1;
     }

</script>
8 respostas

Parabéns pelo código! Ficou muito legal! Gostei de como fez o while!

Eu também arrisquei fazer algo diferente hahah Tentei avisar quantas tentativas ainda faltavam, mas acredito não ter feito do melhor jeito possível.

Aqui vai o código:

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

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

  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 (loginInformado == loginCadastrado && senhaInformada == senhaCadastrada) {
      mostra("Bem-vindo ao sistema, " + loginCadastrado + ".");
      tentativaAtual = maximoTentativas;
    } else if (tentativaAtual < 3) {
      alert("Você tem mais " + (maximoTentativas - tentativaAtual) + " chance(s).");
    } else {
      mostra("Você já tentou 3 vezes. Reinicie a página para tentar novamente.");
    }

    tentativaAtual++
  }

</script>

Acredito que dê para chegar no mesmo resultado com um código melhor... mas mesmo assim, depois de quebrar muito a cabeça, essa foi a única maneira que funcionou para mim. hahaha

Abraços.

solução!

Boa tarde, Mathaus! Como vai?

Sua tentativa foi boa, mas tem um pequeno problema no seu código! Se o usuário acertar o login OU a senha (apenas um deles e errar o outro), vc irá sair do laço de repetição fazendo com que o sistema não pergunte novamente sobre o login.

Veja aí se vc consegue resolver esse problema! Se não conseguir eu te dou uma ajuda!

Grande abraço e bons estudos!

Resolvi dessa forma:

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

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

    var tentativas = 1;

    while(tentativas <= 3){ 
    //Eu encerrei o loop quando a pessoa colocar a senha correta ou suas tentativas terem acabado.

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


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

            alert("Bem-vindo ao sistema " + loginInformado);
            break;
            //Agora a repetição irá se encerra ao acertar o login e a senha.
        } else {

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

        tentativas++;
     }

</script>

Como você falou, se eu errasse somente um dos dois (Login e Senha) iria se encerrar o Loop. Eu coloquei um Break assim que ele acertasse o Login e a senha, pegando o exemplo do Lucas.

Mto bem, Mathaus! É isso aí!

Agora um desafio! Vc consegue fazer a mesma coisa sem utilizar o break?

Só trocar o "break" por "tentativas = 4".

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

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

    var tentativas = 1;

    while(tentativas <= 3){ 
    //Eu encerrei o loop quando a pessoa colocar a senha correta ou suas tentativas terem acabado.

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

        tentativas++;
     }

</script>

Pode ser? haha

Mto bem, essa é uma solução! Mas tem uma forma mais semântica e elegante de resolver isso! Por exemplo:

var tentativas = 1;
var loginIncorreto = true;

while(tentativas <= 3 && loginIncorreto){
     var loginInformado = prompt("Informe seu login");
     var senhaInformada = prompt("Informe sua senha");

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

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

     } else {

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

     tentativas++;
}

Dessa forma, se um dia vc quiser trocar a quantidade de tentativas não vai precisar lembrar de mexer nesse tentativas = 4 que fez dentro do if.

Ah, tu criou uma variável em true que só iria se tornar falsa caso o usuário fizesse o login corretamente Saquei, assim fica bem mais claro. Valeu Gabriel.

Vlw, Mathaus! Qualquer coisa, se surgir outra dúvida é só mandar aqui no fórum!

Grande abraço e bons estudos!