Operador ternário / if

12 respostas
LeandroSantanaDiniz

oi, bom dia…

segue o codigo

public class Casa
{
	Porta porta1 = new Porta();
	Porta porta2 = new Porta();
	Porta porta3 = new Porta();
	
	int quantidadeDePortasAbertas()
	{
		int valor=0;
		
		if (porta1.estaAberta()) { valor++; }
		if (porta2.estaAberta()) { valor++; }
		if (porta3.estaAberta()) { valor++; }
		
		//(porta1.estaAberta()) == (true) ? (valor++) : ();
		//(porta2.estaAberta()) == (true) ? (valor++) : ();
		//(porta3.estaAberta()) == (true) ? (valor++) : ();
		return valor;
	}	
}

o método a cima funciona, porém tentei a implementação com o operador ternário ao invés de if, mas não cosegui, alguém consegue me ajudar? ou explicar o motivo que não vai …

12 Respostas

felipeaqueiroz

Tenta assim:

valor=porta1.estaAberta() ? valor+1: valor; valor=porta2.estaAberta() ? valor+1: valor; valor=porta3.estaAberta() ? valor+1: valor;

moacirjava

Tenta isso:

valor = porta1.estaAberta() ? valor++ : valor--;
igor_ks

isso mesmo:

valor = porta1.estaAberta() ? valor++ : valor--;

nao precisa comparar se é true igual vc fez e o felipeaqueiroz (mas ja editou, rs), pois é booleano

ViniGodoy

Esse é o típico exemplo onde um if se encaixa melhor que um operador ternário.

 a título de informação: o operador ternário não é um if. Ele tem as seguintes características:

a) O tipo de dados antes e depois do : deve ser o mesmo;

b) Ele retorna valor. Portanto, o ternário pode ser usado dentro da chamada de um método ex.: seuMetodo(a > b ? a : b);
lina

Oi,

Ninguém conhece a condição or ?

valor = porta1.estaAberta() || porta2.estaAberta() || porta3.estaAberta() ? valor+1 : valor;

Tchauzin!

ViniGodoy

Ou um array (mais interessante ainda com um list):

public class Casa { 
    Porta[] portas = {new Porta(), new Porta(), new Porta()};

    int quantidadeDePortasAbertas() {
        int valor=0;
        for (Porta porta : portas) {
            if (porta1.estaAberta()) { 
                valor++; 
            }
        }
        return valor;
    }	
}
LeandroSantanaDiniz

desculpem me, mas não entendi …

vou colocar todas as classes para que entendam bem a regra de negócio do exercício.

Porta.java

public class Porta
{


	String cor;
	boolean statusDeAbertura;
	
	
	
	void abre()
	{
		this.statusDeAbertura = true;
	}
	
	void fecha()
	{
		this.statusDeAbertura = false;
	}
	
	void colore(String x)
	{
		this.cor = x;
	}
	
	boolean estaAberta()
	{
		return (statusDeAbertura) == (true)	? (true) : (false);
	}
	
	void mostra()
	{
		System.out.println("Cor: " + cor);
		System.out.println("Está aberta?" + statusDeAbertura);
	}
	
}

Casa.java

public class Casa
{
	
	
		
	Porta porta1 = new Porta();
	Porta porta2 = new Porta();
	Porta porta3 = new Porta();
	
	int quantidadeDePortasAbertas()
	{
		int valor=0;
		
		//com IF
		
		if (porta1.estaAberta()) { valor++; }
		if (porta2.estaAberta()) { valor++; }
		if (porta3.estaAberta()) { valor++; }
		
		//com Operador Ternário
		
		//porta1.estaAberta() = (true) ? (true) : (false);
		//(porta2.estaAberta()) = (true) ? (valor++) : (valor);
		//(porta3.estaAberta()) = (true) ? (valor++) : (valor);
		
		return valor;
	}
	
	
	
}

e PPorta que tem o main

public class PPorta
{
	public static void main(String[] args)
	{
		
		Casa casa1 = new Casa();
		
		casa1.porta1.abre();
		casa1.porta2.fecha();
		casa1.porta3.abre();
		
		System.out.println(casa1.quantidadeDePortasAbertas());
	}
}
pmlm

lina:
Oi,

Ninguém conhece a condição or ?

valor = porta1.estaAberta() || porta2.estaAberta() || porta3.estaAberta() ? valor+1 : valor;

Tchauzin!

Como é que isto calcula o número de portas abertas?

Rodrigo_Sasaki

LeandroSantanaDiniz:
desculpem me, mas não entendi …

vou colocar todas as classes para que entendam bem a regra de negócio do exercício.


O exemplo do ViniGodoy resolve seu problema, ele deu a idéia de criar um array de portas aí ao invés de ter 3 atributos portaPorta porta1 = new Porta(); Porta porta2 = new Porta(); Porta porta3 = new Porta();você vai ter um array com 3 portas Porta[] portas = {new Porta(), new Porta(), new Porta()};e acessa elas assim:portas[0].abre(); portas[1].fecha(); portas[2].abre();

lina

pmlm:
lina:
Oi,

Ninguém conhece a condição or ?

valor = porta1.estaAberta() || porta2.estaAberta() || porta3.estaAberta() ? valor+1 : valor;

Tchauzin!

Como é que isto calcula o número de portas abertas?

Oi,

Olha o código novamente.

Tchauzin!

Rodrigo_Sasaki

lina:
pmlm:
lina:
Oi,

Ninguém conhece a condição or ?

valor = porta1.estaAberta() || porta2.estaAberta() || porta3.estaAberta() ? valor+1 : valor;

Tchauzin!

Como é que isto calcula o número de portas abertas?

Oi,

Olha o código novamente.

Tchauzin!

Mas se as 3 portas estiverem abertas, será somado somente 1 ao valor atual, não é?
Nunca fiz ternários com operador or

lina

digaoneves:
lina:
pmlm:
lina:
Oi,

Ninguém conhece a condição or ?

valor = porta1.estaAberta() || porta2.estaAberta() || porta3.estaAberta() ? valor+1 : valor;

Tchauzin!

Como é que isto calcula o número de portas abertas?

Oi,

Olha o código novamente.

Tchauzin!

Mas se as 3 portas estiverem abertas, será somado somente 1 ao valor atual, não é?
Nunca fiz ternários com operador or

Oi,

Realmente. A soma das portas abertas este código não faz mesmo. Por mais que pareca obvio, não percebi que este seria o resultado do programa. rs

A ideia do Vinny está perfeita.

Tchauzin!

Criado 24 de maio de 2012
Ultima resposta 24 de mai. de 2012
Respostas 12
Participantes 8