Dúvida sobre ternary operator

11 respostas
K

Galera, esse aqui é um exercício da apostila da Caleum de Java que fica aberta no site deles que eu não consegui fazer… Alguém pode me ajudar?

Escreva o método recursivo calculaFibonacci(), usando apenas uma linha. Para isso, pesquise sobre o operador
condicional ternário. (ternary operator)

Valeu!

11 Respostas

Rodrigo_Sasaki

O operador ternário é um operador de atribuição condicional… o que isso quer dizer?

quer dizer que você vai atribuir um valor à uma variável de acordo com uma condição… dá pra fazer o mesmo com um if… exemplo

if(pessoa.getIdade() >= 18){
    maiorDeIdade = true;
}else{
    maiorDeIdade = false;
}

o mesmo código pode ser escrito usando um operador ternário:

maiorDeIdade = pessoa.getIdade() >= 18 ? true : false;

a estrutura é assim
= ? <valor a ser atribuido se a condição for veradadeira> : <valor a ser atribuido se a condição for falsa>

K

Valeu Digao! Só que isso eu já entendia um pouco… o lance é que eu não to conseguindo fazer isso com o Fibonacci. Sempre dá algum erro ou eu tenho que usar mais de uma linha…

nel

digaoneves:
O operador ternário é um operador de atribuição condicional… o que isso quer dizer?

quer dizer que você vai atribuir um valor à uma variável de acordo com uma condição… dá pra fazer o mesmo com um if… exemplo

if(pessoa.getIdade() >= 18){
    maiorDeIdade = true;
}else{
    maiorDeIdade = false;
}

o mesmo código pode ser escrito usando um operador ternário:

maiorDeIdade = pessoa.getIdade() >= 18 ? true : false;

a estrutura é assim
= ? <valor a ser atribuido se a condição for veradadeira> : <valor a ser atribuido se a condição for falsa>

Para esse exemplo:

maiorDeIdade = pessoa.getIdade() >= 18 ? true : false;

Só isso aqui já bastava, certo ?

maiorDeIdade = pessoa.getIdade() >= 18;

Deixando isso de lado e falando do operador, está correto. Só fazer um adendo, kbello, é um operador bem interessante, mas evite usa-lo para muitas comparações na mesma linha, pois isso pode tornar o código confuso. O que me refiro é em usar if´s encadeados.

K

Fala Nel, isso que o Digao colocou é só um exemplo para me ensinar o uso do Ternary operator. Eu preciso mesmo é saber como passar o meu método recursivo Fibonacci ,que já está pronto, para um método de apenas uma linha utilizando o Ternary operator. É um exercício desafio, sei que tem formas mais fáceis de faze-lo , o que me intriga é que até agora não consegui desenvolve-lo com o ternary.

Sacou?

Rodrigo_Sasaki

é… o meu exemplo foi só um exemplo básico e claro de como usar um operador ternário…
as vezes se omitimos coisas óbvias (para nós), alguém que está aprendendo pode se confundir…

mas realmente, o que você disse está correto, nel.

kbello, posta seu código aí, vamos ver como você fez.

nel

kbello:
Fala Nel, isso que o Digao colocou é só um exemplo para me ensinar o uso do Ternary operator. Eu preciso mesmo é saber como passar o meu método recursivo Fibonacci ,que já está pronto, para um método de apenas uma linha utilizando o Ternary operator. É um exercício desafio, sei que tem formas mais fáceis de faze-lo , o que me intriga é que até agora não consegui desenvolve-lo com o ternary.

Sacou?

Faça como digão disse e poste o seu código, ai podemos apresentar algo. digaoneves, não leve a sério o que eu disse sobre aquele if ternario, só quis mostrar que nem precisava do uso dele. Todavia, seu exemplo foi bem claro e simples, suficiente para que ele possa entender o uso.

Abraços amigo.

K
int j=1,k=1,l=0;

public int calculaFibonacci(int i) {
	
	j=1;k=1;l=0;
	
	if(i>2){
	i--;
	calculaFibonacci(i);
	l= j +k;
	k=j;
	j=l;
	}

	return j;
	}

PS: Eu sei que ta feio mas é que eu fiz rapidão para postar aqui! Foi mal…

nel

kbello:
int j=1,k=1,l=0;

public int calculaFibonacci(int i) {
	
	j=1;k=1;l=0;
	
	if(i>2){
	i--;
	calculaFibonacci(i);
	l= j +k;
	k=j;
	j=l;
	}

	return j;
	}

PS: Eu sei que ta feio mas é que eu fiz rapidão para postar aqui! Foi mal…

Procure postar usando as tags code colega, mesmo com pressa. E o quer fazer de condição ternária em seu código se tem simplesmente um único if ?
Sem falar nas inúmeras operações que realiza dentro dele.

K
public int calculaFibonacci(int i) {
		// TODO Auto-generated method stub
		j=1;k=1;l=0;
		
		if(i>2){
		i--;
		calculaFibonacci(i);
		l= j +k;
		k=j;
		j=l;
		}
		return j;
		}

Desculpa... nem tinha visto isso. Então, essa é a forma que eu consegui fazer. Estou justamente perguntando como fazer usando o Ternary Operator pois é isso que o exercício pede. Pode alterar o método todo, não tem problema. Mas tem que virar um Ternary Operator.

ViniGodoy

Primeiro de tudo, você precisa montar uma versão recursiva da função, como o seu exercício pede.
Para isso, basta prestar atenção na regra que define a seqüência matemática:

[img]http://upload.wikimedia.org/math/0/d/5/0d5cce25d67941bb4661afd52609d93c.png[/img]

Fonte: Wikipedia

Então sua função recursiva será
public int fib(int n) {
   if (n == 0)
      return 0;
   if (n == 1)
      return 1;

   return fib(n-1) + fib(n-2);
}

Agora você adapta isso para usar o ternário. ;)

K

:shock: :shock: :shock: :shock: Valeuuuu ViniGodoy! Agora tenho por onde começar!!! É complexo mas já consigo dá meu jeito!
Brigadão a todos galera! Dúvida sanada! Abraços!

Criado 18 de abril de 2012
Ultima resposta 18 de abr. de 2012
Respostas 11
Participantes 4