Erro no uso do operador ternário

3 respostas
C

O que to fazendo de errado?

int a = 10;
(a<20)? a++ : a--;

pq não funfa?

3 Respostas

kenneth

Fala brow,

Seguinte… A questao aqui nao eh o operador ternario, mas sim o incremento…
Quando voce usa a++, ele “usa” a variavel e DEPOIS incrementa (ou decrementa, se for a–)

Entao, se voce fizer

int a = 10;
// a < 20 = TRUE, entao, retorna a++, mas ele imprime o a, e depois disso, incrementa ele.
System.out.println((a<20)? a++ : a--);

Se voce fizer:

int a = 10;
// a < 20 = TRUE, entao, incrementa a e depois disso, imprime...
System.out.println((a<20)? ++a : --a);

Resumo:

a++ //> Usa a e depois incrementa;
++a // > incrementa e depois usa;

Abraco!

davidbuzatto

Calma... Não é isso não kenneth. Você está tentando adivinhar o que o cake quis fazer.
Quando o operador ternário é usado, OBRIGATORIAMENTE você TEM QUE usar o retorno dele, ou seja, atribuir a alguma variável ou usar em algum método.
E ele também obrigatoriamente TEM QUE gerar um valor de retorno.

Este código aqui funciona:
int a = 10;  
int b = (a<20)? a++ : a--;
System.out.println( (a<20)? a++ : a-- );
Esse aqui funciona tbm (teste1 e teste2 retornam um inteiro).
public static void main ( String[] args ) {
    int a = 10;  
    int b = a < 20? teste1() : teste2();
}
   
public static int teste1() { return 1; }
public static int teste2() { return 2; }
Esse aqui não (teste1 e teste2 não retornam nada)
public static void main ( String[] args ) {
    int a = 10;  
    int b = a < 20? teste1() : teste2();
}
   
public static void teste1() {}
public static void teste2() {}

[]´s

kenneth

Entendi…

Me passou pela cabeca que o cake teria posto ali uma “forma reduzida” do problema…

Mas nao sabia dessas obrigatoriedades de ter que usar o retorno…

Mals pela resposta errada
=]

E valeu pela certa!

Abraco!

Criado 26 de agosto de 2010
Ultima resposta 26 de ago. de 2010
Respostas 3
Participantes 3