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

Por que imprimiu o 33 e 37?

Resolvi de 2 maneiras, mas apenas 1 deu realmente certo, que foi esta:

var contador = 30;

    while (contador >= 30 && contador <=40) {
        if (contador == 33 || contador == 37) {
            contador = contador + 1;
        } else {
            mostra(contador);
            contador = contador + 1;
        }
    }

    mostra("Fim.");

Antes dessa tinha pensado em fazer assim:

var contador = 30;

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

    mostra("Fim.");

Mas ele imprimiu todos os números, incluindo os proibidões 33 e 37, só não entendo porquê isso aconteceu.

2 respostas

O ||, também conhecido como ou, é verdadeiro mesmo se somente um dos argumentos for verdadeiro, logo, quando ele é 33 ele não é 37, e vice versa, entrando sempre no loop, se subistituir por (contador !=33 && contador !=37) funcionaria, pois o && só é verdadeiro quando ambos os lados são.

solução!

Entendi! Então ele inseriu o 33 porque para

contador = 33

ele aplica o if:

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

e resulta em true, porque no operador || ("ou", ou "or") true + false = true. E a resposta true faz o bloco ser executado.

E depois, no 37, ele fez a mesma coisa. Por isso ambos proibidões acabaram aparecendo.

Obrigado!