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

Utilização do comando Continue

Seria possível utilizar o comando CONTINUE dentro do IF abaixo, para ignorar os números 33 e 37 fazendo o programa continuar com o laço sem ter que exibir esses números ?

if (numeros == 33  &&  numeros == 37) {
        continue        

    }
<meta charset="utf-8">

<script>

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

}    

function mostra(frase) {

    document.write(frase);
    pulaLinha();
}


var numeros = 30;

while (numeros <= 40) {

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

        mostra(numeros);
    }

    numeros++;
}

</script>
6 respostas
solução!

Em princípio, sim, Antônio, pois o continue força a próxima iteração do laço.

A forma como tu o implementaste, no entanto, está errada, devido à condição no if. Ambos os exemplos de código que tu expuseste apresentam esse erro, embora de modos diferentes.

O teu primeiro exemplo é esse:

if (numeros == 33  &&  numeros == 37) {
    continue; 
}

Vamos pensar com calma no que está sendo feito: tu comparas o valor da variável numeros a 33 e 37, esperando igualdade (==); caso essas comparações sejam verdadeiras, o continue é utilizado.

Mas espera: para essa comparação ser validade, a variável numeros tem de ser tanto igual a 33 como igual a 37, ao mesmo tempo — devido ao uso do e (&&) entre elas. Ou seja, essa condição nunca será alcançada, e o continue nunca entrará em uso.

A simples mudança do operador e (&&) por ou (||) resolve. Creio que tu possas deduzir o porquê.

Ps: no primeiro exemplo, acrescentei o ponto e vírgula que faltava após o continue.

Entendido André.

Muito Obrigado!!!

Olá.

Desculpe postar depois da postagem já ter sido marcada como resolvida, porém no segundo IF o uso do operador AND está correto. Ou seja, caso a variável numeros seja diferente de 33 e também seja diferente de 37, chama o método mostra(). Se você colocar o operador OR ( || ) aí ele vai chamar o método sempre, uma vez que 33 é diferente de 33 OR 37, assim como 37 é diferente de 33 OR 37. Lembre-se que o OR valida se ao menos uma condição for verdadeira.

Eu só quis adicionar isso, pois com a explicação final do André, eu tive a impressão que você pudesse usar o segundo exemplo dele com OR e aí daria problemas.

[]'s.

Olá, Bruno.

Claro, estás correto. Acabei me confundindo nessa parte do esclarecimento. Editei fora aquele trecho. Agradeço pela correção.

Lembrei que iria explicar outra coisa, que segue abaixo.

Antonio, parta do princípio que tu decidas adotar o primeiro exemplo corrigido — ou seja, o if com o operador ou (||) — no laço while do segundo exemplo, substituindo o if que lá se encontra.

(Vou fazer essa explicação porque imagino que era uma tentativa tua, e também porque acho válida a explicação para quem está aprendendo)

Ou seja, tu verificas se o valor da variável numeros é 33 ou 37 e, caso seja, acionas o continue.

(A chamada ao método mostra, no caso, seria feita após o if)

O que aconteceria nesse caso é que o método mostra nunca seria chamado. O motivo disso é que tu terias incorrido no que se chama "loop (ou laço) infinito".

O que acontece é o seguinte: no caso do laço while, o incremento da variável à qual tu condicionas a execução do ciclo ocorre dentro do laço, geralmente ao final dele, como fizeste (numeros++).

Vamos pensar sobre como acontece. O valor inicial da variável numeros é 30, conforme delimitado por ti. Portanto, já que ela "passa" na condição imposta pelo while (numeros <= 40), ele é acessado. Daí nos deparamos com o if, que testa a igualdade da variável numeros a 33 ou 37. Como na primeira iteração o valor dela é 30, o corpo do laço é ignorado. Em seguida, a variável é passada ao método mostra e, ao fim do laço, incrementada.

Tudo iria bem até o valor ser incrementado para 33. Nesse caso, ao se alcançar o if, a condição seria verdadeira, e o continue entraria em uso. Como já dito, o continue força a próxima iteração do laço. Ou seja, nada do que está abaixo do if seria feito; a execução voltaria ao começo do laço. E, neste caso, o valor da variável numeros continuaria sendo 33, pois ela nunca teria sido incrementada, dado que o incremento (numeros++) só se dá no fim do laço — e, como dito anteriormente, tudo posterior ao if é ignorado. Então, nesse cenário, a execução fica sendo feita repetidamente (continue -> começo do laço -> condição do if -> continue -> começo do laço...).

Num laço for, por exemplo, esse cenário em específico não ocorreria, pois o incremento da variável de iteração é sempre feito na chamada do ciclo (por exemplo, for (int numeros = 30; numeros <= 40; numeros++)).

Enfim, espero que tenhas entendido e que, de alguma forma, te ajude a bem entender esses conceitos. Abraço.

Boa André, esse ponto é muito importante e é onde iniciantes erram muito.

[]'s.

André, entendi sim! Obrigado por todo apoio. Bruno, obrigado pela ajuda também.