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

if (!verdT == Convert.ToBoolean(0) - Laços e Multiplos

            int s = 0;
            for (int i = 1; i <= 100; i++)
            {
                Boolean verdT = Convert.ToBoolean(i % 3);
                if (!verdT == Convert.ToBoolean(0))
                {
                    s += i;
                }
            }
            MessageBox.Show(" A soma de 1 a 100, pulando os múltiplos de 3: " + s);

Fiquei com duvida no meu próprio if engraçado kkkkk

Alguém poderia me ajudar a entender, escrevi de forma intuitiva e acabou funcionando mas na hora de explicar para um colega não consegui.

!verdT -> ' ! ' = a negar/diferente do que está na frente, correto ?

3 respostas
solução!

Tudo bem Matheus?

O método ToBoolean() que recebe um inteiro retorna True sempre que um número diferente de 0 é passado para ele.

Todas as vezes que o i % 3 retorna algo que não é zero, isso indica que o número não é múltiplo de 3 então você terá verdT com o valor True.

Dentro do if, a ! inverte o valor (que nesse caso fica False), e como o ToBoolean nesse caso devolve False, você ficará com a seguinte comparação:

False == False

Como False é igual a False, isso devolve True. Como consequência ele irá executar o que está dentro do if, e acumulará o valor de i na soma.

--

Para o caso contrário (quando i % 3 devolver 0), você acabará com a comparação:

True == False

e por isso ele não entra no if.


Você poderia também fazer um if para ele entrar sempre que i % 3 for diferente de 0:

ìf(i % 3 != 0)

Faz sentido?

Abraço

O ToBoolean() já tem definido como padrão o True/False ? Exemplo: 0 para False 1 para True

Como eu estou colocando a comparação Convert.ToBoolean(0) dessa maneira, esta definido como False por ser 0 ?

ìf(i % 3 != 0) dessa forma fica mais claro para entender.

Oi Matheus.

Isso mesmo! Se o valor for 0 ele retorna False. Qualquer outro valor ele retorna True.

Abraço!