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
:
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!
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:
tentativas
com o valor 0, deste modo:var maximoDeTentativas = 3;
var tentativas = 0;
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!
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
}
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");
}
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! :)