10
respostas

Não exibir 33 e 37 - dúvida

Tentei fazer com o mínimo de códigos possíveis, mas não entendi porque meu código se comporta assim:

<script>
  function pulaLinha() {
    document.write('<br>')
  }

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

  var contador = 30

  while (contador <= 40) {
    contador = contador + 1
    if (contador != 33 && contador != 37) {
      mostra('O próximo número é ' + contador)
    }
  }

  pulaLinha()
  mostra('FIM')
10 respostas

Olá, Rodrigo, tudo bem?

Testei aqui seu código, e ele parece ok! Notei apenas que você mostra apenas o próximo número, e não o "atual", ou seja, na tela aparece do 31 ao 41. É essa a sua dúvida?

Se você deseja mostrar o número "atual", ou seja, os números de 30 a 40, basta executar a instrução contador = contador + 1 depois de mostrar o número! Algo assim:

  var contador = 30

  while (contador <= 40) {
    if (contador != 33 && contador != 37) {
      mostra("Número atual: " + contador)
    }
    contador = contador + 1
  }

  pulaLinha()
  mostra('FIM')

Espero ter te ajudado! Qualquer dúvida estaremos aqui para te ajudar. Bons estudos!

Não sei se aluno deve responder mas, eu acredito que não estava rodando pela falta da condição ELSE do IF, porque quando o código compilava ele não sabia o que fazer quando encontrasse a condição contrária, no caso, continuar executando o contador.

eu consegui rodar seu código modificando o contador pra dentro do IF (até pra que o valor 30 também fosse exibido) e adicionando o else como mencionado anteriormente, tambei adicionei alguns ponto e vírgula, e dei uma indentada pra ficar mais fácil de compreender, ficou assim:

var contador = 30;

while (contador <= 40){

    if (contador != 33 && contador != 37) {

        mostra('O próximo número é '+contador);
        contador = contador+1;

    }
    else{
        contador = contador+1;

    }
}

Espero que tenha ajudado!

Olá, Maurício, tudo bem?

Sinta-se livre para ajudar as outras pessoas do fórum também! Pode responder sem problemas.

O seu código também é uma solução válida! Mas apenas complementando que, na verdade, o bloco if não necessita do else para funcionar! Se a condição do if não for satisfeita, o programa simplesmente ignorará o bloco de código e continuará executando normalmente.

Aliás, eu percebi que havia um erro no código da minha resposta anterior! Acabei de editar para o modo correto! Peço desculpas.

Antônio,

Na verdade, não entendi como o meu código funcionou. Para mim não fez sentido o código abaixo funcionar, bem como a função mostra('O próximo número é' + contador) ter que estar dentro do if e não FORA, exemplo :

if (contador != 33 && contador != 37) { mostra('O próximo número é ' + contador)

Agora, se eu reescrevesse como está abaixo não funciona o código, apesar de para mim fazer mais sentido:

while (contador <= 40) { contador = contador + 1 mostra('O próximo número é ' + contador) if (contador != 33 && contador != 37) { } }

Gostaria de explicação disso. hahahaha.

Olá novamente, Rodrigo!

Vamos analisar passo a passo o primeiro código que você mandou:

  var contador = 30

  while (contador <= 40) {
    contador = contador + 1

    if (contador != 33 && contador != 37) {
      mostra('O próximo número é ' + contador)
    }
  }

  pulaLinha()
  mostra('FIM')

Primeiro será executada a instrução var contador = 30. Logo depois entraremos no bloco while pela primeira vez, sendo feita a verificação contador <= 40, que será satisfeita. Em seguida, é executada a instrução contador = contador + 1, fazendo com que contador fique com valor 31.

Depois entramos na verificação if (contador != 33 && contador != 37), que será satisfeita, já que 31 não é igual a 33 e também não é igual a 37!

Veja bem, para que a expressão inteira dentro desse if seja verdadeira, precisamos que as expressões contador != 33 e contador != 37 sejam ambas verdadeiras! Uma expressão com o operador de desigualdade != é avaliada como true (verdadeira) se os números que estão sendo comparados forem, de fato, diferentes!

Então, como nós sabemos que 31 é diferente de 33 e que 31 também é diferente de 37, a expressão será avaliada de acordo com o seguinte passo a passo:

  • (contador != 33 && contador != 37)
  • (true && true)
  • (true)

Dessa forma, a expressão inteira é avaliada como true e o código dentro do bloco if é executado! Ou seja, será executada a instrução mostra('O próximo número é ' + contador) e será imprimido na página "O próximo número é 31".

Assim, chegamos ao fim do bloco while e retornamos a verificar a condição contador <= 40, e assim por diante para todos os próximos números. Apenas quando a variável contador tiver valor 33 ou 37, o código dentro do bloco if não será executado!

Por exemplo, digamos que contador esteja com valor 33, a condição do bloco if será avaliada assim:

  • (contador != 33 && contador != 37)
  • (false && true)
  • (false)

Já que a expressão contador != 33 não pôde ser satisfeita, então o código dentro do if não será executado e não será mostrada a frase "O próximo número é 33"!

Agora analisando o último código que você mandou:

while (contador <= 40) {
    contador = contador + 1
    mostra('O próximo número é ' + contador)

    if (contador != 33 && contador != 37) {

    }
}

A primeira coisa que podemos observar é que temos um bloco if com nenhum código dentro! Então ele não está fazendo diferença ali, pois mesmo que a condição (contador != 33 && contador != 37) seja satisfeita, não haverá nenhum código para ser executado. E se a condição não for satisfeita, o if é simplesmente ignorado. Então o código acima é o equivalente ao abaixo:

while (contador <= 40) {
    contador = contador + 1
    mostra('O próximo número é ' + contador)
}

Ou seja, você está apenas fazendo um loop normal! Serão mostrados na tela os números 31 a 41!

Espero ter tirado suas dúvidas! Se ainda tiver ficado com alguma, pode nos chamar! Bons estudos! :)

Antônio, e por que o código abaixo não funciona?

var contador = 30
 while (contador <= 40) {
    if (contador != 33 && contador != 37) {
  mostra('O próximo número é ' + contador)
  contador = contador + 1
}
}

Como seria um código ideal que me permitisse fazer do 30 ao 40 com o menor número de linhas possível? Estou com dificuldade na ordem da sintaxe. Porque o código acima para mim diz o seguinte: enquanto o contador for menor ou igual a 40: se contador for diferente de 33 e 37, mostre o número contador e depois contador +1.

Olá novamente, Rodrigo!

Esse código não funciona basicamente porque a instrução contador = contador + 1 está dentro do if! O problema é que quando contador chegar ao valor 33, o if não será executado e a variável contador não receberá +1 no seu valor, e nunca chegará a 34! O programa entra então em um loop infinito.

Para solucionar isso, basta colocar a instrução contador = contador + 1 fora do if. O código JS completo ficaria assim:

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

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

  var contador = 30

  while (contador <= 40) {

      if (contador != 33 && contador != 37) {
        mostra('O próximo número é ' + contador)
      }
      contador = contador + 1

  }

  pulaLinha()
  mostra('FIM')

Afinal, você quer somar +1 ao valor da variável contador sempre, mesmo que não exiba o seu valor na tela.

Espero ter ajudado! Se tiver ficado alguma dúvida, pode nos chamar. Bons estudos!

Muito obrigado!

e por que o comando

mostra ('O próximo número é ' + contador)

pode estar dentro do IF e não fora?

Olá, Rodrigo!

Se o comando mostra ('O próximo número é ' + contador) ficar fora do if, não será feita nenhuma verificação para imprimir essa frase na tela, e os número 33 e 37 aparecerão também.

Aliás, quando você for escrever código aqui no fórum, você pode colocá-lo dentro de um bloco de código para melhor visualização! Basta clicar no ícone </> na barra de ícones para gerar um bloco de código, que inicia com três crases seguidas e fecha com mais três crases seguidas. Aqui um exemplo:

Exemplo de código HTML dentro do bloco de código, com as tags meta, script e código javascript dentro da tag script. E junto das primeiras três crases, foi digitado "HTML". O código é realçado com algumas cores, de acordo com a linguagem especificada.

Note que você pode escrever o nome da linguagem junto com as três primeiras crases para realçar o código!

Espero ter ajudado!

Essa foi a melhor interação de tirar dúvidas que já encontrei até agora!!

Obrigada, meninos!