Try, catch

Não sei se é do meu java ou algum erro bobo meu, porém olhem esse método:

[code]public boolean sexoIsValid(String sexo) {
if (sexo != “Masculino” ){
System.out.println(sexo);
System.out.println(“true”);
return false;

	}
	System.out.println(sexo);
	System.out.println("false");
	return true;
}[/code]

Eu coloquei os System.outs, para saber se eu estava fazendo algo de errado ou não, enfim, continuando…
Fui testar e independente do que eu coloco, ele retorna “true”, olha o que ele printou no console:

[quote]Masculino
true
exception.SexoException: SEXO INVÁLIDO
at cliente.Pessoa.(Pessoa.java:27)
at cliente.Cliente.(Cliente.java:13)
at principal.App.main(App.java:29)
LSLSLS
true
exception.SexoException: SEXO INVÁLIDO
at cliente.Pessoa.(Pessoa.java:27)
at cliente.Cliente.(Cliente.java:13)
at principal.App.main(App.java:29)
[/quote]

No primeiro teste eu coloquei “Masculino”, retornou true, normal. No segundo teste coloquei “LSLSLS” ele em vez de me retorna false, me retornou true. Ok, ok.
Agora o meu segundo problema é isto… No construtor da classe eu fiz assim:

public Pessoa (String nome, Data dt, String sexo) throws SexoException{ this.nome = nome; this.dt_nascimento = dt; this.sexo = sexo; if (sexoIsValid(sexo) == false){ throw new SexoException ("SEXO INVÁLIDO"); } }

Independente do que o método retorna, “true” ou “false”, ele entra na condição e gera o erro de “Sexo Inválido”, acredito que seja algum erro bobo meu que acabei deixando passar porém até agora não consegui identificar, se puderem me ajudar ficarei bem grato.
E caso seja preciso, aqui está minha classe “SexoException”:

[code]package exception;

public class SexoException extends Exception{
private static final long serialVersionUID = 1L;

public SexoException (String mensagem){
	super (mensagem);
}

}
[/code]

Não se compara Strings com o operador ==, o correto é usar o método equals().

troque para if(!sexo.equals("Masculino!)){ //...

Você está comparando o de forma errada. Quando se compara Strings (ou qualquer outro objeto) se usa equals(), no caso seria:

[code] public boolean sexoIsValid(String sexo) {
if (“Masculino”.equals(sexo)){
System.out.println(sexo);
System.out.println(“true”);
return false;

        }  
        System.out.println(sexo);  
        System.out.println("false");  
        return true;  
    }  [/code]

Quanto ao segundo problema, como sexo não aponta para o mesmo lugar que está “Masculino” ele entra no if e retorna false fazendo com que seja lançada uma SexoException.

Quando você usa == com 2 objetos você está verificando se eles apontam para o mesmo objeto (e não se os dois objetos que essas variaveis se referenciam são iguais).

Opa, sabia que era um erro bobo. São tantas coisas que acabei esquecendo algo tão simples. Só isto já resolveu todo meu problema, muito obrigado. Dúvida solucionada. :smiley:

É mais fácil escrever o método assim:

public boolean sexoIsValid(String sexo) { return "Masculino".equals(sexo); }

Além disso, seria melhor melhorar a sua mensagem de erro:

public Pessoa (String nome, Data dt, String sexo) throws SexoException{ this.nome = nome; this.dt_nascimento = dt; this.sexo = sexo; if (!sexoIsValid(sexo)){ throw new SexoException ("O sexo '" + sexo + "' não é válido!"); } }

Também talvez fosse melhor comprar com equals ignore case. E incluir o sexo feminino (se só puder mesmo masculino, pra que pedir o sexo?)