RESOLVIDO - duvida sobre o operador de negação

Turma to com uma duvida sobre o operador de negação. que me ajuda ai?

if (!(A>B)) {//....ação} // o que essa linha diz exatamente?

valeu

O operador “!” transforma o resultado de uma expressão booleana de false para true e vice versa.

Supondo que a = 1 e b = 2

if (!(A>B)) { ação111 } else { ação222}

Retorna a ação111

Essa expressão é a mesma coisa que

if (B>A){...

:arrow:

[quote=rcerullo]Supondo que a = 1 e b = 2

if (!(A>B)) { ação111 } else { ação222}

Retorna a ação111

Essa expressão é a mesma coisa que

if (B>A){... [/quote]

na verdade ! ( a > b ) é equivalente a ( a <= b ).

“na verdade ! ( a > b ) é equivalente a ( a <= b )”
q eu entendi , eu entendi mas q isso ! ( a > b ) parece q invenaram so pra complicar , realmente parece!
Esse nao deixa duvidas “( a <= b )” por isso me parece bem mais simples e elegante
não acham?

agradeço a ajuda de todos pq isso me faltava mesmo

[quote=rafaelczy]“na verdade ! ( a > b ) é equivalente a ( a <= b )”
q eu entendi , eu entendi mas q isso ! ( a > b ) parece q invenaram so pra complicar , realmente parece!
Esse nao deixa duvidas “( a <= b )” por isso me parece bem mais simples e elegante
não acham?

agradeço a ajuda de todos pq isso me faltava mesmo[/quote]

Pois é, o operador de negação do Java é bastante infeliz, pois ele fica “escondido” no código. Como você mesmo disse, ficar negando expressões inteiras dificulta a legibilidade do código. Por exemplo, ao invés de:

 ! (a && b) 

eu prefiro:

( !a || !b) ,

ou seja, eu procuro aplicar esse operador somente em variáveis ou métodos. E seu tiver acesso à classe do método prefiro escrever um método mais explícito, por exemplo, se eu tiver um coleção, eu prefiro escrever um método isNotEmpty() do que usar ( ! isEmpty() ).

[quote=rafaelczy]“na verdade ! ( a > b ) é equivalente a ( a <= b )”
q eu entendi , eu entendi mas q isso ! ( a > b ) parece q invenaram so pra complicar , realmente parece!
Esse nao deixa duvidas “( a <= b )” por isso me parece bem mais simples e elegante
não acham?

agradeço a ajuda de todos pq isso me faltava mesmo[/quote]

Não acho coisa nenhuma.

Em vez de achar que o operador de negação foi só uma complicação que inventaram para te encher o saco, aceite que ela existe e procure entender por que é que ela existe.

Se você não tivesse o operador de negação, você teria de sambar muito quando tivesse algumas coisas mais complicadas.
Por exemplo, digamos que você tem algo como:

(a < b) && (c >= d)

Para negar essa expressão (achar o contrário dessa expressão), bastaria usar:

! ((a < b) && (c >= d))

Só que o equivalente da expressão acima (negada) é:

(a >= b) || (c < d)

não (a >= b) && (c < d). Isso não é intuitivo, não? Faça alguns testes.

Explique por que é que eu tive de alterar o operador && para || na hora de negar a expressão.

Como você deve ter percebido, quando mais você aprende, mais você sabe que não sabe nada mesmo :slight_smile:

[quote=rafaelczy]"
Esse nao deixa duvidas “( a <= b )” por isso me parece bem mais simples e elegante
não acham?
[/quote]

Neste caso sim. Mas olha este abaixo como ficar mais elegante com ‘!’

boolean preparado = false;
// trocentas linhas de código aqui.
//elegante
if(!preparado){
//
}
//menos elegante
if(preparado == false){
//
}

[quote=asousaj][quote=rafaelczy]"
Esse nao deixa duvidas “( a <= b )” por isso me parece bem mais simples e elegante
não acham?
[/quote]

Neste caso sim. Mas olha este abaixo como ficar mais elegante com ‘!’

boolean preparado = false;
// trocentas linhas de código aqui.
//elegante
if(!preparado){
//
}
//menos elegante
if(preparado == false){
//
}

[/quote]

if(!preparado){ //aqui vc testa SE (PREPARADO == TRUE) ? // }

[quote=entanglement][quote=rafaelczy]“na verdade ! ( a > b ) é equivalente a ( a <= b )”
q eu entendi , eu entendi mas q isso ! ( a > b ) parece q invenaram so pra complicar , realmente parece!
Esse nao deixa duvidas “( a <= b )” por isso me parece bem mais simples e elegante
não acham?

agradeço a ajuda de todos pq isso me faltava mesmo[/quote]

Não acho coisa nenhuma.

Em vez de achar que o operador de negação foi só uma complicação que inventaram para te encher o saco, aceite que ela existe e procure entender por que é que ela existe.

Se você não tivesse o operador de negação, você teria de sambar muito quando tivesse algumas coisas mais complicadas.
Por exemplo, digamos que você tem algo como:

(a < b) && (c >= d)

Para negar essa expressão (achar o contrário dessa expressão), bastaria usar:

! ((a < b) && (c >= d))

Só que o equivalente da expressão acima (negada) é:

(a >= b) || (c < d)

não (a >= b) && (c < d). Isso não é intuitivo, não? Faça alguns testes.

Explique por que é que eu tive de alterar o operador && para || na hora de negar a expressão.

[/quote]

“Explique por que é que eu tive de alterar o operador && para || na hora de negar a expressão.”
pq ao usar um op. de negação tens q alterar para o contrario todas operações e nao apenas aquelas entre operandos q estão entre parênteses.
razoável ?

[quote=rafaelczy]

if(!preparado){ //aqui vc testa SE (PREPARADO == TRUE) ? // }[/quote]

Não, ‘if(!preparado)’ está testando se preparado == false;

if(preparado) mesma coisa de if(preparado == true)
if(!preparado) mesma coisa de if(preparado == false)

[quote=asousaj][quote=rafaelczy]

if(!preparado){ //aqui vc testa SE (PREPARADO == TRUE) ? // }[/quote]

Não, ‘if(!preparado)’ está testando se preparado == false;

if(preparado) mesma coisa de if(preparado == true)
if(!preparado) mesma coisa de if(preparado == false)

[/quote]
ah ta… pq o padrão do booleano é começar valendo TRUE né?! …dai usando ! inverte o teste e pergunta se preparado==FALSE
to certo?

[quote=rafaelczy]
ah ta… pq o padrão do booleano é começar valendo TRUE né?! …dai usando ! inverte o teste e pergunta se preparado==FALSE
to certo?[/quote]

Não, o valor padrao de boolean é false.

!preparado valida se preparando é false, independente do valor q foi declarado.

Cara procura a apostila J-11 da caelum, vai te ajudar bastante.