5
respostas

minha solução

aparentemente o mais óbvio para todo mundo foi colocar o if dentro do while, mas eu coloquei o while dentro do if :v

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

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

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

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

        alert("Boas-vindas ao sistema " + loginInformado);

    } else {

        var tentativa = 1;

        while ( tentativa < 3 ) {
        loginInformado = prompt("Incorreto. Informe seu login novamente");
        senhaInformada = prompt("Informe sua senha");
        tentativa = tentativa + 1;
        }

        alert("Tentativas excedidas. Redefina sua senha.");
    }
</script>

funcionou em todos os testes rs mas em todas as atividades até agora eu sinto que meu raciocínio segue um caminho bem diferente do proposto pelo instrutor e, não só isso, também é bem diferente da lógica da maioria dos colegas.. devo me preocupar muito com isso?

entendo que não há certo e errado muito definidos em programação, mas também sei que pensar fora da caixinha nem sempre é inovação, às vezes é só falta de compreensão de um assunto, por isso o questionamento: o quanto meu raciocínio está sujeito a atrapalhar o aprendizado da lógica de programação?

[puts virou crise existencial já hahahaha] :b

5 respostas

Estou aos poucos pegando tbm , eu sei que o objetivo era treinar o while , mas na minha cabeça criei dentro da condição if - else, sei que não é o objetivo correto do exercício dentro desse código , mas fiquei feliz quando finalizei e funcionou. E a partir disso , vou aprimorando o código utilizando o while, acredito que desta maneira vou melhorando meu raciocínio e conhecendo a linguagem .

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

    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);
    } else {

        alert("Login inválido restam 3 tentativas ");

         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 restam 2 tentativas");

                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 ultima tentativa");
                         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 usuário bloqueado ");

    }}}}
</script>

Caique, pensar fora da caixa é muito bom para um programador, pois pode trazer otimizações ao programa, e torna-lo mais eficiente que a media. Sobre o seu codigo, verifique o seguinte, se eu errar na primeira tentativa, mas acertar na segunda, ele aceita minha entrada? Da forma que está, depois que ele erra a primeira vez, mesmo que acerte, ele nunca vai validar o acesso. Mas não deixe de ser inovador nos seus programas.

Tem razão, Felipe! Já consegui corrigir... Aproveitei e fiz umas alterações testando tudo que aprendemos e fiz uma brincadeirinha de cadastro.

Com as alterações o usuário tem que primeiro cadastrar seu nome e a partir dele é gerado uma senha com números aleatórios. Depois disso é aberto para o login, que deve ser feito com a senha gerada pelo programa.

Vou deixar o código aqui se alguém quiser rodar pra ver funcionando.

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

   function pulaLinha() {
    document.write("<br>");
   }

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

   var loginCadastrado = prompt("Digite seu nome para cadastro:");

   var codigoSenha = parseInt(Math.random()*9999);

   var senhaCadastrada = loginCadastrado + codigoSenha;

   alert ("ANOTE! Use seu nome para fazer login. Sua senha será seu nome seguido de " + codigoSenha + ". Clique OK para fazer o primeiro acesso.");

   var tentativa = 1;
   var maximoTentativas = 3;

   for (tentativa; tentativa <= maximoTentativas; tentativa++){
        var loginInformado = prompt("Login: (lembre que é seu nome cadastrado)");
        var senhaInformada = prompt("Senha: (lembre que tem um código numérico)");

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

        alert("Boas vindas, " + loginInformado);
        mostra("<h3> Você conseguiu acessar esta página! </h3>");
        mostra("<big>" + loginInformado + " é a pessoa mais sexy que já acessou essa página! </big>")
        break;

        } else {
            if (tentativa == 3) {
                alert("OPS! Máximo de tentativas.");
                mostra("<h3> Acho que você caiu do cavalinho, " + loginInformado + "...</h3>")
                mostra("<big>Mas não fique triste. Atualize a página e tente mais uma vez.</big>")

            } else {

                alert("Avisei pra anotar!! Agora só pode tentar mais " + (maximoTentativas - tentativa) + "x!");
            }
        }    
    }
</script>

Sobre ser certo ou errado o pensamento eu não, mas no começo eu meio que parti do mesmo princípio que o seu. Mas o meu não estava dando certo. Não tinha entendido como o while funcionava e não conseguia fazer funcionar. Eu estava me perdendo no final, na hora do while fazer a conta das tentativas. Agora deu certo, mas coloquei o if dentro do while

É, Anderson, da forma que eu fiz acaba dando um erro.. ele não entende que a pessoa pode acertar na segunda tentativa e, mesmo que entre com o número correto, depois do primeiro erro ele só exibe mensagens de erro. Acredito que a gente pense assim por falta de dominar as estruturas dos comandos e tudo mais, mas com tempo e prática a gente vai pegando o jeito. :D