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

O que está errado?

Não apareceu nada na tela, nem no console. Por que não funciona?

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

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

}

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

}

var numero = 30;
while (numero <=40) {
    if (numero != 33 || numero != 37);
    mostra (numero);
    mostra (numero + 1);


}

mostra ("FIM");

</script>

Obrigada,

4 respostas

E aí, Juliana!

Há alguns pontos a serem observados. Primeiro, você fez a verificação através da condição while, onde o valor será sempre verdadeiro. Com isso o programa entra num loop infinito, pois o número nunca será maior que 40 pra conseguir sair do while. Recomendo usar um simples if no lugar.

Outro ponto é que existe um ; após o if, o ideal seria abrir chaves para indicar quais comandos pertencem a esse if. Sem as chaves, é comum as linguagens de programação entenderem que somente o primeiro comando pertence ao if, que nesse caso seria o mostra (numero);. O comando seguinte não pertence a esse if e a função mostra (numero + 1); seria chamada mesmo se a condição fosse falsa. Colocando as chaves, você garante que os dois comandos serão rodados somente se a condição for verdadeira.

Um último ponto, mas dessa vez puramente estético: as duas chamadas da função mostra ();acontecem uma após a outra, sem pular linha. Com isso, o resultado exibido seria 3031FIM. Aproveitando que você criou a função pulaLinha ();, é possível chamá-la para separar os resultados.

Dessa forma, o resultado final do código foi esse:

if (numero <=40) {
    if (numero != 33 || numero != 37){
      mostra (numero);
      pulaLinha();
      mostra (numero + 1);
      pulaLinha();
    }
}
  • Note que troquei o while por um if. Isso impede o loop infinito e garante que o segundo if só será verificado se o número for menor ou igual a 40.
  • O ; foi removido do segundo if e foram adicionadas chaves;
  • A função pulaLinha (); foi adicionada entre os comandos para separar os resultados.
  • Como a função pulaLinha (); contém 3 <br>, o resultado final é bastante espaçado, mas novamente, isso é puramente estético.

Espero que tenha ficado claro. Bons estudos!

solução!

Oi juliana.pellegrinetti toda vez que você abrir seu arquivo html no navegador e ele não exibir nada, e ficar rodando e rodando sem parar, é porquê existe algum código que nunca termina de ser processado, o que também chamamos de loop infinito. Ok o que fazer quando isso acontece ?

R: Primeiro procure por estruturas de repetição (while, for) e verifique se a lógica que eles estão utilizando permite que o laço seja corretamente, inicializado, a condição está correta, e o incremento ou decremento acontece.

Olhando o seu código temos um while Vamos análisá-lo conforme sugeri acima:

var numero = 30;
while (numero <=40) {
    if (numero != 33 || numero != 37);
    mostra (numero);
    mostra (numero + 1);
}

A Váriavem numero inicializa com 30. Então entramos no while a condição é enquanto for menor ou igual a 40.Blz!Aí temos o if, com esse if vamos mostrar todos os números diferentes de 33 ou diferentes de 37, mas vou deixar essa questão pro final. Logo em seguida temos essa linha:

 mostra (numero);

numero vale 30 então mostraremos 30 na tela com a função mostra logo em seguida temos:

 mostra (numero + 1);

Aqui mostraremos na tela 30 + 1 ou seja 31.Apesar de estarmos mostrando 31, mas, porém, todavia o valor de numero continua o mesmo, pois não fizemos nenhuma atribuição desse novo valor a variável número. Ou seja o incremento não acontece, logo em seguida a condição retornará pela segunda vez ao laço com o mesmo valor, 30.

Agora que você já sabe o porquê de o loop ficar infinito, vamos consertar umas coisas: Primeiro vamos relembrar que queremos imprimir todos os números de 30 a 40 exceto os números 33 e 37. Em outras palavras queremos mostrar:

30 31 32 34 35 36 38 39 40

A lógica do jeito que está no if, não consegue fazer isso porque meu if tem como condição se número é diferente de 33 ou diferente de 37, como toda vez o número em questão vai ter um único valor ele sempre vai ser diferente de um dos dois números, logo irá imprimir todos, e não é o que queremos.A lógica correta seria assim:

 if (numero != 33 && numero != 37);

Assim garantiremos que não mostraremos nem um e nem outro.Vamos pular ambos.

Além disso precisamos consertar nosso incremento caso contrário continuaremos no loop infinito.

A implementação já com os ajustes ficaria assim:

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

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

}

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

}

var numero = 30;
while (numero <=40) {
    if (numero != 33 && numero != 37){
     mostra (numero);
    }
    numero++;
}

mostra ("FIM");

</script>

Espero ter te ajudado e bons estudos.

Obrigada. O primeiro código não funcionou :( o segundo sim. Mas não entendi o que é o numero++.

Oi Juliana, número++ é uma outra forma mais simplificada de escrever:

numero = numero+1;

Onde incrementados a variável com o valor dela mais 1; ou de 1 em 1.

Além dessa forma ainda temos uma outra : Você pode se deparar com alguns códigos assim:

numero+=1; Que também é a mesma coisa que:

numero ++;

numero = numero + 1;

Existem pleo menos essas três formas de incrementar uma variável em 1.

Espero ter ajudado e bons estudos.Se a dúvida ainda persistir é só falar