Não está funcionando do jeito que achei | Lógica de programação I: Os primeiros programas com Javascript e HTML | Solucionado
Não está funcionando do jeito que achei
Referente ao curso Lógica de programação I: Os primeiros programas com Javascript e HTML, no capítulo Repita tarefas e atividade Simulando uma tela de login
Vinícius da Silva do Nascimento
(14.4k xp, 20 posts)
Primeiramente, não tinha ideia nenhuma de como fazer para repetir no máximo 3 vezes até que dei uma olhada na opinião do instrutor para ter uma ideia do que fazer, mas preferi insistir na resolução que eu mesmo já tinha escrito.
Encontrei dois problemas no meu código:
1) Se eu digitar corretamente o login, mas errar propositalmente a senha, ou digitar errado o login mas digitar corretamente a senha, o programa não faz nada. Ele simplesmente não exibe nada, nem que eu errei ou acertei. Mas se eu errar propositalmente tanto o login quanto a senha o programa "funciona" menos o segundo "else" que é a minha próxima dúvida.
2) No segundo "else" do programa, simplesmente não acontece nada e não exibe o "alert" de tentativas excedidas.
E por favor, sejam sinceros, meu código ficou mais complicado do que o código do professor? Por que eu acho que, se tem um jeito mais simples de se fazer a mesma coisa, não há necessidade de complicar mais a vida né. E só por uma questão de eficiência mesmo, e não por preguiça de ter que escrever o código.
var loginCadastrado = "alura";
var senhaCadastrada = "alura321";
var loginInformado = prompt("Informe seu login");
var senhaInformada = prompt("Informe sua senha");
if (loginCadastrado == loginInformado && senhaCadastrada == senhaInformada) {
alert("Bem-vindo ao sistema " + loginInformado);
var contadorLimite = 2;
if (contadorLimite <= 3) {
while (loginCadastrado != loginInformado && senhaCadastrada != senhaInformada && contadorLimite <= 3) {
console.log(contadorLimite);
alert("Login inválido. Tente novamente");
loginInformado = prompt("Informe seu login");
senhaInformada = prompt("Informe sua senha");
contadorLimite = contadorLimite + 1;
alert("Número de tentativas excedido. Tente novamente mais tarde.");
Érico Cintra Monteiro
(264.7k xp, 32 posts)
No seu whilte
while (loginCadastrado != loginInformado && senhaCadastrada != senhaInformada && contadorLimite <= 3)
Você está validando se (login != And senha !=) ou seja só irá entrar no seu while caso o login e a senha forem errados.
Quanto ao seu código tenho algumas observações:
1 - Você está repetindo o código para fazer a validação dos dados, poderia utilizar uma estrutura de do...while
2 - Esse if que você está fazendo é desnecessário if (contadorLimite <= 3) já que você está atribuindo o valor 2 logo acima, portanto ele sempre será verdadeiro.
Essa seria um possível solução:
var numeroTentativas = 1;
var loginEfetuado = false;
loginEfetuado = true;
alert("Login inválido. Tente novamente - Tentativas = " + numeroTentativas);
numeroTentativas++;
} while (numeroTentativas <= 3 && loginEfetuado == false)
if (loginEfetuado == false) {
Fala amigo, eu corrigi os erros que você pontuou, muito obrigado. Mas sinceramente, em minha opinião, claro, achei o código que você me passou mais complicado.
E nessa parte do seu código não está faltando um abre chaves ( { )?
while (numeroTentativas <= 3 && loginEfetuado == false)
Bom, no fim das contas eu ajustei meu código e suas observações foram bem valiosas, obrigado. Fiquei bem satisfeito com o resultado final e acho que está razoavelmente simples de entendê-lo.
var tentativas = 2;
while (tentativas > 0) {
console.log(tentativas + " tentativa(s) restante(s)");
tentativas = tentativas - 1;
tentativas = tentativas - 2;
if (tentativas == 0) {
Legal que gostou, não está faltando chaves no caso o comando que usei é o Do...While
diferente do while padrão, esse comando sempre executa ao menos uma vez e no while ele valida se deve continuar o log, então as chaves ficam assim:
E no seu último código, continua tendo o mesmo IF duas vezes :D
Ué, mas seu eu tirar esse segundo if:
Ele não mostrará ao usuário caso ele acerte na segunda ou terceira tentativa... De que outro jeito poderia escrever sem alterar muito a estrutura do meu código?
Obs.: Agora realmente está tudo funcionando. Pode não ser o melhor jeito de fazer o código mas, está funcionando =)
Assista as primeiras aulas sobre sobre Lógica de programação I: Os primeiros programas com Javascript e HTML.