Duvida com o operador |

5 respostas
java
T

Boa noite Galera, alguém pode me ajudar ? O que eu fiz de errado pra este código não compilar?

public Candlestick(double abertura, double fechamento, double minimo, double maximo, double volume, Calendar data) {
	
	this.abertura = abertura;
	this.fechamento = fechamento;
	this.minimo = minimo;
	this.maximo = maximo;
	this.volume = volume;
	this.data = data;
	
	if(this.abertura < 0)|(this.fechamento < 0){ //esse | do código não compila
		throw new IllegalArgumentException("Valor não pode ser negativo");
	}

}

5 Respostas

elvex

Oi @thiagofranceschini!
A intenção é utilizar um OU dentro do if? Se sim, o operador é || e não |

rmendes08

Olá, o problema é que em Java, a expressão avaliada no bloco if tem que estar toda ela dentro de parênteses, portanto o seu código deve ser:

if( (this.abertura < 0)|(this.fechamento < 0) ) {

ou

if( this.abertura < 0 | this.fechamento < 0 ) {

rmendes08

Os dois operadores: || e | funcionam como o operador OU lógico. A diferença é que o operador || funciona como operador de curto-circuito. Considere a seguinte expressão:

expr1 || expr2 || expr3

utilizando o operador ||, caso expr1 seja verdadeira as expressões restantes não são nem avaliadas, basta que uma delas seja verdadeira para a expressão inteira seja verdadeira. Já o operador | força todas as expressões do comando serem avaliadas. Um experimento interessante é criar expr1(), expr2(), expr3() como métodos que retornam booleanos e imprimem algo no console, combiná-los com os operadores || e |, && e & e observar a saída.

T

Obrigado @rmendes08 e @elvex ,
eu vim do python e esse tipo de estrutura é feita com muito mais liberdade na linguagem, e por isso não vi o erro na falta do parenteses!
Em python você pode colocar dentro ou fora.
Obrigado, não esqueço mais!

elvex

Legal, não sabia disso! Obrigado!

Criado 2 de janeiro de 2018
Ultima resposta 3 de jan. de 2018
Respostas 5
Participantes 3