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.