Problema com IF do método booleano

4 respostas
vbullet

Oi amigos, conheço essa forum a muito tempo mas so cadastrei nele agora pq aparecu um problema e não consegui arrumá-lo
Aposto que deve ser bobagem mas vida de programador é assim né, talvez vcs vejam algo que eu não percebi…

Bom, o meu problema é no método isAdmin para usar o retorno na listagem dos produtos no jsp
O método getTipo eu só criei enquanto não resolvo o meu problema

public String getTipo(){
		return logado.getTipo();		
	}
	
	public boolean isAdmin() {
		String tipo = getTipo();
		System.out.println("-------------------------------------");
		System.out.println("Seu tipo é: "+tipo);
		if(tipo == "administrador"){ 
			System.out.println("Você é um administrador");
			return true;	
		}else{
			System.out.println("Você não é um administrador");
			return false;			
		}
		
	}

esse é o campo do banco de dados que define o tipo do usuário: administrador ou cliente

http://imageshack.us/photo/my-images/543/screenshot014bu.jpg/

e esse é a saída no console…eu dei println em tudo para saber que tipo era e se executava o if ou não

http://imageshack.us/photo/my-images/707/screenshot011dq.jpg/

O estranho é q sempre cai no else;

  • já coloquei tipo == “cliente” e inverti o retorno
  • só executa o if quando coloco != o que é muito estranho pois a forma como ta escrito “administrador” é igual a string armazenada na variável tipo e igual está no banco de dados como vcs viram na figura

Me ajudem ai galera…

4 Respostas

ErickRAR

Comparações de String é com o método equals da classe String.

public boolean isAdmin() {  
    String tipo = getTipo();  
     if(tipo.equals("administrador")){   
        System.out.println("Você é um administrador");  
        return true;      
    }else{  
        System.out.println("Você não é um administrador");  
        return false;             
    }

Ou de forma simplificada:

public boolean isAdmin() {  
    return getTipo().equals("administrador");
    }

Pra evitar problemas com maiscula e minuscula, use o equalsIgnoreCase.

L

Eu te aconselho a utilizar o método de comparação equalsIgnoreCase(), pois ele ignora o maiusculo e minusculo.

Exemplo:

public String getTipo(){  
    return logado.getTipo();          
}  
  
public boolean isAdmin() {  
    String tipo = getTipo();  
    System.out.println("-------------------------------------");  
    System.out.println("Seu tipo é: "+tipo);  
    if(tipo.equalsIgnoreCase("administrador")){   
        System.out.println("Você é um administrador");  
        return true;      
    }else{  
        System.out.println("Você não é um administrador");  
        return false;             
    }  
      
}
ViniGodoy

Ou melhor ainda… faça getTipo() retornar um enum e não uma String.

Use Strings para armazenar texto, somente texto, e nada mais do que texto.

vbullet

Desconfiei que o problema era o meu java que está enferrujado
Deu certo aqui, problema resolvido, valeu a todos ai

ViniGodoy, achei interessante sua sugestão de usar o enum, pois como o tipo de usuário já é definido e eu só puxo do bd pode ser interessante
vou tentar implementar aqui…

Mais uma vez, obrigado a todos

Criado 28 de julho de 2012
Ultima resposta 30 de jul. de 2012
Respostas 4
Participantes 4