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

while pode ter mais de uma regra?

7 respostas

Bom dia Diogo,

Pode sim, vc apenas precisa analisar o código afim de evitar loops infinitos.

abraços

O código da forma que está, imprime só até o 32.. não sei se foi reparado isso... eu consegui fazer o exercício... mas estava consultando sobre mais de uma regra dentro do while, nesse caso acho que não se aplica essa regra dentro do while porque na primeira condição falsa ele sai do loop..., nesse caso mesmo o while podendo ter mais de uma regra, a nossa depende de que ele não pare na primeira exceção...

solução!

E aí Diego, tudo bem?

O while pode sim ter mais de um critério de parada, entretanto você tem que ficar atento, pois ele só repetirá enquanto a condição for verdadeira (true) e no primeiro retorno falso (false) que tiver será interrompido. No seu caso, quando chegar no número 33, ele verificará que 33 é menor ou igual a 40, só que não é diferente de 33. A partir deste momento a condição se torna falsa, o que interrompe o looping e pula direto para a próxima instrução, que é 'mostra(FIM)'.

Abraços.

Como você tem que mostrar todos os números de 30 a 40 independentemente das exceções (ou seja, os números 33 e 37), o seu contador deve garantir que a contagem vá até o 40.

No caso do 33 e 37, deve ser feito outro teste dentro do laço do while para tratar estas exceções:


var contador = 30;

while (contador <= 40) {
   if (contador != 33 && contador != 37) {
         mostra(contador);
   }
   contador = contador + 1;
}

No seu exemplo, quando se chegava no número 33, a condição do seu while não era atendida e, portanto, saia do laço, sem dar oportunidade para o contador continuar a contagem até o 40.

Oi Diego você ainda tem alguma dúvida a respeito desse exercício ? Na computação existem diversas maneiras de se alcançar um resultado.Podemos testar a implementação com o comando for:

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

Espero ter ajudado bons estudos.

Maison Galvão, salvo engano, seu código também vai ter o mesmo comportamento indesejado.

Isto porque o ou do Java(script), assim que encontrar a primeira cláusula que retorna "true", já atenderá a condição do if por completo sem testar as subsequentes e assim, executará o comando dentro do if.

Ou seja, quando n for 33 (n=33), não atenderá a primeira cláusula do ou (n!=33), mas atenderá a segunda (n!=37) e executará o código do mesmo jeito.

O mesmo vale quando n for 37: ele já entrará no if na primeira condição e nem testará a segunda.

Opa Jorge bem observado editei meu post anterior. Agora está correto. Obrigado.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software