Problemas com condição terna

7 respostas
smello

oi pessoal…
estou com dúvida ao fazer uma condição terna…
tenho a seguinte condição:
Se o código do cliente for nulo ou maior q 4, entao tenho q pegar só os 4 primeiros digitos… se não, tenho q pegar ele inteiro
aí fiz assim ó…

public String getClienteId() {
clienteId = clienteId != null || clienteId > 4 ? clienteId.substring(0,4) : clienteId ;

alguem pode me ajudar??
beijuu

7 Respostas

Luca

Olá

Condição terna, nunca vi ninguém falar de modo tão meigo sobre ela. Já vi gente reclamando e achando-a incompreensível.

No seu caso a explicação não bate com o código. Se é nulo e maior do que 4, o teste deveria ser: (clienteId == null || (clienteId &gt 4)

Use os parentêsis caso não saiba a ordem de precedência das operações. A instrução Java ficaria assim:

public String getClienteId() {
    clienteId = (clienteId == null) || (clienteId &gt 4) ? clienteId.substring(0,3) : clienteId ; 

    . . . .
    // retorna uma String, talvez clientId.toString() se é que existe
}

É claro que alterei o substring para ficar de acordo com o que você leu no javadoc:

[]s
Luca

H

Para solucionar este problema e simples , você deve colocar () nas condições vc esta fazendo duas comparações.

smello

Luca…fiz o jeito que vc explicou, mas o eclipse sublinhou o (clienteId > 4) com a msg “The operator > is undefined for the argument type(s) String int”… q q é issuuuuuuuuuuuu
aposto q é uma pergunta boba…mas é meu 3º dia trabalhando com java =/

valeuu!!

A

Cara… tem alguma coisa errada nessa condição. Provavelmente o que você quer é, que se o código COMEÇAR com um dígito maior que quatro, pegar os 4 primeiros dígitos, certo?

Se for isso, você tem que fazer algo como:

int primDigito = Integer.parseInt(clienteId.substring(0,1));
 if(primdigito > 4){
   return clienteId.substring(0,4);
  }
  else{
    return clienteId;
  }

falou,

Armando

Mantu

A condição que você está montando tem alguns problemas, antes de qualquer outra coisa:

Do jeito como voce descreveu, se por acaso tivermos clienteId igual a null, você tentaria pegar os 4 primeiros dígitos de clienteId. Ora, isso não faria sentido, pois clienteId é nulo e, logo, não tem nenhum digito. Isso é o tipo de algoritmo que, quando implementado em java, leva a um infame NullPointerException :twisted:
Será que o que voce quer não é isso aqui?

Se o código do cliente não for nulo então
     Se o código do cliente tiver mais que 4 digitos então
         pegar só os 4 primeiros digitos
     Senão
         pegar o código inteiro
 Senão
     <não sei o que vc quer fazer se o código for nulo....>

Note que não é legal vc misturar a condição que verifica se o código é nulo, pois isso levará a situações inconsistentes.
Se for utilizar só operador ternário, vc vai ter que aninhar um ternário dentro do outro pro algoritmo acima, e isso fica meio feio, meio ruim de ler depois…
Mas tente fazer assim mesmo e poste aqui para vermos como ficou, ok?

Mantu

smello:
Luca…fiz o jeito que vc explicou, mas o eclipse sublinhou o (clienteId > 4) com a msg “The operator > is undefined for the argument type(s) String int”… q q é issuuuuuuuuuuuu
aposto q é uma pergunta boba…mas é meu 3º dia trabalhando com java =/

valeuu!!


Isso é porque, de fato, o seu clienteId é um String. Em java, o operador “>” não está definido, “preparado” para operar com Strings. O que vc quer na verdade não é nem mesmo saber se clienteId é “maior” que 4, e sim saber se clienteId tem mais de 4 digitos. Sendo assim, ao invés de fazer

clienteId > 4

faça

clienteId.length() > 4
smello

ahhh funcionouuuuu!!
valeuuu gentee!

beijuuuu

Criado 24 de novembro de 2006
Ultima resposta 24 de nov. de 2006
Respostas 7
Participantes 5