2
respostas

WHILE NAO FUNCIONA

Removido a pedido do usuario.
2 respostas

Oi Rafael

Para compartilhar o código é preciso utilizar a ferramenta </> (inserir o bloco de código) e inserir o código entre as crases.

Oi, Rafael! Tudo bem? :)

Existem dois fatores que estão impedindo a execução do while:

  • O valor de tentativas não é alterado quando o usuário erra a senha. Para que isso seja possível, precisamos adicionar 1 toda vez que a senha é digitada incorretamente. No bloco else da primeira condicional, você pode adicionar essa estrutura de incremento, ficando assim:
if (password == registeredPassword) {
    document.write("seja bem vindo");
} else {
    document.write("acesso não autorizado, tente novamente");
    tentativas++; // tentativas = tentativas + 1
}

Ao lado do comando, adicionei um comentário mostrando uma forma menos comum de fazê-lo!

  • No else da segunda condição, está faltando o .write de document.write(). Ao adicioná-lo, teremos isso:
if (tentativas > maximoDeTentativas) {
  document.write("conta bloqueada, você errou a senha três vezes");
} else {
  document.write("senha errada, tente novamente");
}

Desse modo, o while volta a funcionar. Porém, ao rodar o código, irá notar que serão feitas apenas 2 repetições. Por que isso está acontecendo?

A condição do while ocorre enquanto tentativas for menor que maximoDeTentativas. Logo, quando o valor final de tentativas chegar a 3 a execução acabará.

Existem dois caminhos para que o while seja executado três vezes:

  • Inicializar a variável tentativas com o valor 0, deste modo:
var maximoDeTentativas = 3;
var tentativas = 0;
  • Alterar a condição do while trocando o sinal de menor para o de menor ou igual, assim:
while (tentativas <= maximoDeTentativas) {
    // seu código vem aqui
}

Para compreender o motivo dessa mudança, recomendo a leitura do artigo Como utilizar operadores de comparação em Javascript da Alura, que fala sobre os operadores relacionais, como estes que vimos.

Um ponto importante na estrutura de repetição é a condição de parada. Seu código já estabeleceu essa condição ao dizer que o while irá funcionar enquanto o número de tentativas não ultrapassar o limite. No entanto, é interessante que exista uma outra condição de parada, nesse caso, quando o usuário digitar corretamente a senha. Para isso, podemos adicionar na primeira condicional um break, que interrompe o while caso a senha esteja correta. Ao adicioná-lo, seu código ficará assim:

if (password == registeredPassword) {
  document.write("seja bem vindo");
  break; // comando de parada
}

A experiência do usuário ao utilizar um programa é muito importante, assim como a do próprio programador ao desenvolvê-lo. Então, trago algumas dicas que vão auxiliar nos seus estudos de Lógica de Programação!

  • No else da primeira condicional, fica legal alterar o document.write() para um alert(), pois o document.write() não aparece ao usuário assim que ele digita a senha, mas somente depois que o while finaliza. Após essa alteração, seu código ficará da seguinte forma:
if (password == registeredPassword) {
    document.write("seja bem vindo");
    break;
} else {
    alert("acesso não autorizado, tente novamente");
    tentativas++; // tentativas = tentativas + 1
}
  • Recomendo remover o else da segunda condicional. Por haver um outro aviso de acesso negado, esta parte acaba ficando redundante. Ao removê-la, teremos algo assim:
if (tentativas > maximoDeTentativas) {
  document.write("conta bloqueada, você errou a senha três vezes");
}
  • A padronização e a organização do código são essenciais para o desenvolvimento de programas. Nesse sentido, é bacana sempre manter o código indentado e com o mesmo padrão de variáveis, espaçamentos, quebras de linha e uso de ponto e vírgula.

Ao fim, seu código ficará da seguinte forma:

<script>

    var registeredPassword = "123456";
    var maximoDeTentativas = 3;
    var tentativas = 1;

    while (tentativas <= maximoDeTentativas) {

        var password = prompt("digite sua senha");

        if (password == registeredPassword) {
            document.write("seja bem vindo");
            break;
        } else {
            alert("acesso não autorizado, tente novamente");
            tentativas++; // tentativas = tentativas + 1
        }

        if (tentativas > maximoDeTentativas) {
            document.write("conta bloqueada, você errou a senha três vezes");
        }
    }

</script>

Caso surja alguma dúvida, sinta-se confortável para utilizar o fórum! Ficarei feliz em ajudar no seu processo de aprendizado.

Bons estudos! :)

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!