Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Codigo pulando numero 33, 37 e 38

Opa galera beleza? Fiz esse codigo aqui, porem ao executar, o numero 38 tambem some, alguem pode me ajudar ?

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

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


     for(var contador = 30; contador <= 40; contador++) {

        if (contador == 33 ) {
        contador++;
        }
        if (contador == 37) {    
            contador++;
        } else {
            mostra(contador);
            }
      }

    mostra("FIM");

</script>
4 respostas
solução!

Opa Diego, beleza?

Pelo que pude perceber, o que acontece é que quando contador==37, o mesmo é incrementado para 38 e não entra no else, encerrando o laço for e inicializando no 39... E por que isso acontece?

Quando você declara ELSE após uma condição IF, você SÓ vai entrar no ELSE se o IF for falso. Ou seja, quando o contador é igual a 38, você não entra no else, e dessa forma não executa a função mostra(contador).

Uma possível solução pra esse problema seria organizar o código da seguinte forma:

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

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


     for(var contador = 30; contador <= 40; contador++) {

        if (contador != 33 && contador != 37){
            mostra(contador);
        }

      }

    mostra("FIM");

</script>

Dessa forma, a função mostra(contador) só será executada quando o contador for diferente de 33 e 37. Outra coisa que notei no seu código é que você usou o contador++ dentro do seu laço for. Isso não é muito recomendado, pois no próprio laço for você introduz a lógica de incrementação em:

for([...]; [...]; contador++) 

Espero que tenha ajudado... qualquer dúvida a mais tô a disposição! :)

Opa José beleza ? Entendi a explicaçao valeu pelas dicas de nao utilizar o ++ dentro do laço "for", porem fiquei na duvida do porque nao aconteceu a mesma coisa com o numero 34, pois em teoria ele deveria repetir o mesmo ocorrido com o numero 37. Abraço!

Massa sua dúvida! Acho que eu deixei em aberto essa parte mesmo...

Pensa comigo, quando você tem um SE NÃO (else), é porque você tem um SE (if), correto? É por isso que o erro só ocorre com o 37!! O SE NÃO se refere ao 37... Vamos ler o código pra ver se ficar mais fácil de entender:

Quando o contador é igual a 33: Nesse caso, ao entrar no laço for e se deparar com o primeiro IF (contador==33), a sua função vai incrementar em +1 e ele vai pra 34, ok?

Depois disso, ele vai pro próximo IF... A sua função pergunta: é igual a 37? Se sim incrementa mais um, se não eu mostro o número. Resposta: Não! Então ele chama a função mostra(contador).

Quando o contador é igual a 37: Aqui, quando entrar no laço for e se deparar com o primeiro if, nada vai acontecer, pois 37 é diferente de 33.

Depois disso, no segundo IF... A sua função pergunta: é igual a 37? Se sim incrementa mais um, se não eu mostro o número. Resposta: Sim! Então ele incrementa o número em +1 e itera para o próximo número, sem mostrar o número 38...

Para deixar isso mais claro, experimente inverter a ordem do seu código e primeiro fazer o if do 37, depois o do 33 seguido de um else... você vai verificar que agora o número que não aparecerá é o 34.

Uma outra maneira do seu código funcionar nos moldes que você escreveu, seria por exemplo remover o ELSE, mantendo apenas os IF'S para que incrementem em um quando fosse um número não desejado e mostrando o contador todas as vezes, dessa maneira:

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

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


     for(var contador = 30; contador <= 40; contador++) {

        if (contador == 33 ) {
            contador++;
        }
        if (contador == 37) {    
            contador++;
        } 
        mostra(contador);
      }

    mostra("FIM");

</script>

Agora sim! Entedi tudo certinho, valeu!