Comparar String

Olá pessoal,
busco de um banco o sexo da pessoa e dpois tento fazer uma comparacao para setar em um radio button mas nao to conseguindo…

if(sexo.equals("Masculino") jRadioButtonMasculino.setSelected(true); else jRadioButtonFeminino.setSelected(true);

ele sempre seleciona a segunda opcao (radiobuttonfeminino) como se a condicao fosse falsa… mas ja verifiquei se o valor que ta em sexo é mesmo Masculino

Ow, voce verificou se tem algum espaço em branco apos a palavra Masculino? Ja tive um problema parecido uma vez e era isso…

  1. Como vc carregou a variável sexo?
  2. Como o sexo está gravado no banco?
  3. Qual é o tipo de dado da coluna do sexo?
  4. Por que você abriu esse tópico em Java básico, se o assunto é relacionado a Persistência ou Interface Gráfica, e temos fóruns exclusivos para isso? Sua dúvida é na sintaxe do if?

Verifica os espaços e utiliza um ignore case e com ctz vai dar certo, se o sexo for string claro =]

Vini, minha duvida é em relação a sintaxe de comparação no if… acho que não teria haver com a propria interface… ou teria? o.o se tiver mals… peço pra transferir para a area apropriada
vou tentar o que vcs sugeriram

O if funciona assim:

if (condicao) { codigoSeForVerdade(); } else { codigoSeForFalso(); }

O método equals testa se dois objetos possuem o mesmo conteúdo. No caso de Strings, ambos devem ser idênticos, incluindo letras maiúsculas e minúsculas e acentos.
Se você não quiser diferenciar maiúsculas de minúsculas, use o método equalsIgnoreCase da classe String.

O que acontece é que muitos bancos de dados incluem espaços ao final do campo se ele for declarado como um VARCHAR, até que ele complete o tamanho do VARCHAR. Nesse caso, use a função trim() na hora de carregar a variável sexo.

Agora, o sexo, sendo um valor tipicamente booleano, não deveria estar sendo gravado no banco como VARCHAR. Sugiro que, se esse for o caso, você troque o valor do sexo para um boolean. Afinal, só são admitidos dois valores possíveis HOMEM (true) ou MULHER (false). Na programação isso vira um boolean também ou, se você quiser deixar bem explicito, um enum. Não use Strings para representar tipos de dados diferentes de texto.

[quote=long]Olá pessoal,
busco de um banco o sexo da pessoa e dpois tento fazer uma comparacao para setar em um radio button mas nao to conseguindo…

if(sexo.equals("Masculino") jRadioButtonMasculino.setSelected(true); else jRadioButtonFeminino.setSelected(true);

ele sempre seleciona a segunda opcao (radiobuttonfeminino) como se a condicao fosse falsa… mas ja verifiquei se o valor que ta em sexo é mesmo Masculino[/quote]

o equals já retorna um tipo booleano.

o ideal é que vc utilize desta maneira:

jRadioButtonMasculino.setSelected("masculino".trim().equalsIgnoreCase(sexo));

na abordagem anterior vc tem q fazer uma verificação e uma suposição

  • verificar se a variável sexo não está nula, caso contrário ocorrerá um erro em tempo de execução
  • supor que “Masculino” está armazenado exatamente com esta grafia no banco de dados

no exemplo que postei, elimina estes dois passos.

espero que ajude…

[quote=Z]
o ideal é que vc utilize desta maneira:

jRadioButtonMasculino.setSelected("masculino".trim().equalsIgnoreCase(sexo));

na abordagem anterior vc tem q fazer uma verificação e uma suposição

  • verificar se a variável sexo não está nula, caso contrário ocorrerá um erro em tempo de execução
  • supor que “Masculino” está armazenado exatamente com esta grafia no banco de dados

no exemplo que postei, elimina estes dois passos.

espero que ajude…[/quote]

o trim tem que ser aplicado na variável sexo.

jRadioButtonMasculino.setSelected("masculino".equalsIgnoreCase(sexo.trim()));

e o feminino fica assim

jRadioButtonFeminino.setSelected(!"masculino".equalsIgnoreCase(sexo.trim()));

Pergunta - por que é que o sexo masculino é true e o feminino é false? Isso é discriminação. Para evitar isso eu sugeriria usar um simples char (que ocupa exatamente o mesmo espaço) e permite usar outras coisas, como G ou L ou I ou sei lá o quê.

como foi dito pela marcia e pelo blanka… era problema devido ao espaco…
consegui resolver com o ignore case e o trim x)
vini, sobre a sua ideia… eu gostei, vou da uma olhada no meu codigo e tentar implementar dessa maneira como vc disse msm kalker duvida posto aqui no forum =P
vlw por ajudarem

Dá para inverter também. O difícil de usar variáveis booleanas para representar coisas femininas é que vc nunca sabe se “sim” representa sim mesmo. :roll:

if(sexo.CompareToIgnoreCase("Masculino") == 0){ jRadioButtonMasculino.setSelected(true); }else{ jRadioButtonFeminino.setSelected(true); }

ve se assim funciona…