3
respostas

É errado usar o "break" para interromper o loop?

<meta charset="UTF-8">

<script>

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

    var loginAcesso = prompt("Digite o login:");
    var senhaAcesso = prompt("Digite a senha:");

    var contador = 1;

    if(loginAcesso == loginCadastrado && senhaAcesso == senhaCadastrada){

        alert("Seja bem-vido, " + loginCadastrado + ".");

    } else{

        while(loginAcesso != loginCadastrado || senhaAcesso != senhaCadastrada){

            alert("Login ou senha estão incorretos. Número de tentativas: " + contador + " de 3");

            loginAcesso = prompt("Digite o login novamente:");

            senhaAcesso = prompt("Digite a senha novamente:");

            contador += 1;

            if(contador == 3) {

                alert("Número de tentativas excedido!!!");
                break;
            }
        }

    }

</script>
3 respostas

Olá Guilherme, tudo bem?

Você pode usar o break para encerrar a execução de um while. Porém, em relação ao seu código, diríamos que ele não está utilizando uma boa prática: você sabe qual a condição para interromper o loop do while. Logo, como boa prática, colocaríamos essa condição dentro do while em si.

Mas olhando o seu código mais a fundo, podemos ver outros problemas. Se o usuário não conseguir acertar na primeira vez, ele entra no while. Caso ele acerte dentro do while, em momento algum há um aviso que ele já está logado no sistema.

Nesse caso, eu usaria uma outra estrutura: do...while(). Ele vai executar o código pelo menos uma vez e continuar até que uma determinada condição definida no while seja satisfeita.

Logo, o código ficaria assim:

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

var contador = 0;
var logado = false;

do {
    if (contador > 0) {
        alert("Login ou senha estão incorretos. Número de tentativas: " + contador + " de 3");
    }

    var loginAcesso = prompt("Digite o login:");
    var senhaAcesso = prompt("Digite a senha:");

    if (loginAcesso == loginCadastrado && senhaAcesso == senhaCadastrada) {
        logado = true;
        alert("Seja bem-vindo, " + loginCadastrado + ".");
        break;
    }

    contador += 1;
}
while (contador < 4)

if (!logado) {
     alert("Número de tentativas excedidas. Conta bloqueada.");
}

Nesse caso, como eu não sei em qual tentativa o usuário acerta a senha, eu uso o break para sair do loop.

Espero ter ajudado. Se ficou alguma dúvida, me avisa que tentarei ajudar mais =)

Cussa

Olá Cussa, tudo bem e com você?

Verdade, eu não pensei nessa possibilidade, muito obrigado! O código conforme colocado por você dá ao usuário 4 tentativas, não? O correto seria deixar a condição do do-while com o contador menor que 3 ou iniciar o contador em 1, já que são apenas três tentativas.

Olá,

Eu realmente passei direto pela questão do número de tentativas. A melhor opção seria colocar o contador menor que 3, já que se iniciarmos em 1, ele iria mostrar a mensagem de usuário e senha incorretos.