Metodo retornando valor incorreto

15 respostas
libo8
package provatext;

/**
 *
 * @author 
 */
 
public class login {
  
    private int l=0;  
    public void mLogin(int tes){
        this.l=tes;
        this.l=1;
        System.out.println("Login: "+this.l);
    }
    
    public int getLogin(){
        System.out.println("Login 2: "+l);
        return this.l;
    }
}
o problema eh o seguinte pessoal, implementei essa classe para um sistema de login de um trabalho na faculdade..

Quando a letra "l" for igual a 0 quer dizer que o login nao foi efetuado.. e quando por 1 quer dizer quer dizer que o login foi feito..

mas o problema é o seguinte eu chama o metodo "mLogin" de uma outra classe, e passo por parametro o valor 1 para dizer q o login foi feito.. coloquei ate um System.out.println para verificar se foi realmente o valor 1 que o metodo recebeu...ate ai tudo bem.. ele imprimiu o valor 1 corretamente.. mas o problema acontece quando chama o metodo "getLogin", ele me retorna o valor 0, na verdade ele retorna o mesmo valor que eu declarei lah em cima que por acaso é 0, mas na verdade ele deveria retornar o valor "1" que eu setei para a variavel "l" pelo metodo "mLogin"...

alguem poderia me ajudar? nao sei oq estou fazendo errado..

vlw pessoal.. sou novato no forum

15 Respostas

rodrigo_gomes

Ola,

Por acaso você está dando um “new” logo antes de chamar o segundo método?

B

Podemos ver como você está chamando essa classe login?

M

Tente mudar a sua variável l para estática

private static int l = 0;

:smiley: Abraços

libo8

Mauro Filho:
Tente mudar a sua variável l para estática

private static int l = 0;

:smiley: Abraços

mt obrigado amigo…

coloquei o static e funcionou perfeitamente… :smiley: :smiley: :smiley:

B

Mudar para static não é uma solução se você não sabe para quê o static serve. Isso tá mais pra gambiarra.

Você deve estar instanciando dois objetos, e que o login apenas do primeiro. Static apenas propaga o atributo para todos os objetos instanciados dessa classe.

libo8

ambos estao em classes diferentes..

esse joga o valor para o metodo:
login log=new login();

confirm=1;
log.mLogin(confirm);

e esse chama:

login lg=new login();
       
        
        if(lg.getLogin()==1){
                if(vazio==false){
                JOptionPane.showMessageDialog(null,"Voce nao prencheu os campos obrigatorios.\nTente novamente");  
                 }else{    
                this.comandoSalvar();
                 }
       
        }else{
            JOptionPane.showMessageDialog(null,"Necessario efetuar login.\nTente novamente");  
        }
        
    }
Javabuntu
libo8:
ambos estao em classes diferentes..

esse joga o valor para o metodo:
login log=new login();

confirm=1;
log.mLogin(confirm);

e esse chama:

login lg=new login();
       
        
        if(lg.getLogin()==1){
                if(vazio==false){
                JOptionPane.showMessageDialog(null,"Voce nao prencheu os campos obrigatorios.\nTente novamente");  
                 }else{    
                this.comandoSalvar();
                 }
       
        }else{
            JOptionPane.showMessageDialog(null,"Necessario efetuar login.\nTente novamente");  
        }
        
    }

ué meu amigo está mais que claro seu problema:


esse joga o valor para o metodo:
login log=new login();
e esse chama:
login lg=new login();

você está setando o valor com a instância log, e depois cria outra instância lg e compara com a nova....
obviamente nunca vai dar certo... por isso o static deu certo, uma baita gambiarra que você setou o valor pra 1 de todas as instâncias novas...

pra que você ta criando essa nova instância login lg=new login(); ????? definitivamente não precisa e este é seu erro. e aqui usa a instância log que criou pra setar:
if(log.getLogin()==1){

colega se vc criar uma instância e setar nela, e depois dar um get com outra instância, nunca vai dar o que você quer...
flw Hewerton

libo8
Javabuntu:
libo8:
ambos estao em classes diferentes..

esse joga o valor para o metodo:
login log=new login();

confirm=1;
log.mLogin(confirm);

e esse chama:

login lg=new login();
       
        
        if(lg.getLogin()==1){
                if(vazio==false){
                JOptionPane.showMessageDialog(null,"Voce nao prencheu os campos obrigatorios.\nTente novamente");  
                 }else{    
                this.comandoSalvar();
                 }
       
        }else{
            JOptionPane.showMessageDialog(null,"Necessario efetuar login.\nTente novamente");  
        }
        
    }

ué meu amigo está mais que claro seu problema:


esse joga o valor para o metodo:
login log=new login();
e esse chama:
login lg=new login();

você está setando o valor com a instância log, e depois cria outra instância lg e compara com a nova....
obviamente nunca vai dar certo... por isso o static deu certo, uma baita gambiarra que você setou o valor pra 1 de todas as instâncias novas...

pra que você ta criando essa nova instância login lg=new login(); ????? definitivamente não precisa e este é seu erro. e aqui usa a instância log que criou pra setar:
if(log.getLogin()==1){

colega se vc criar uma instância e setar nela, e depois dar um get com outra instância, nunca vai dar o que você quer...
flw Hewerton

eu criei a nova instancia pois o metodo mLogin e getLogin estao em classes diferentes..
agora complico o negocio.. nao sei como usar a mesma instancia para os dois..
log.mLogin e log.getLogin se ambos estao em classes diferentes..

aonde eu declaro a instancia log??

B

Passe o objeto login como parâmetro para a outra classe durante a construção dela, ou como parâmetro para algum método dela.

libo8

e como eu faco isso?

estou comecando na linguagem java… hehe :smiley:

B
public class ClasseDeNegocio
{
  private Login login;
  public ClasseDeNegocio (Login login)
  {
    this.login = login;
  }

  public void setLogin(Login login)
  {
    this.login = login;
  }

  public void realizaNegocio(Login login)
  {
    // use o parâmetro login passado para fazer o que quiser.
    outrosMétodos(login);
  }
}

Aliás, por que mLogin e getLogin estão em classes diferentes se no exemplo que você passou eles pertencem à mesma classe?

libo8
renrutal:
public class ClasseDeNegocio
{
  private Login login;
  public ClasseDeNegocio (Login login)
  {
    this.login = login;
  }

  public void setLogin(Login login)
  {
    this.login = login;
  }

  public void realizaNegocio(Login login)
  {
    // use o parâmetro login passado para fazer o que quiser.
    outrosMétodos(login);
  }
}

Aliás, por que mLogin e getLogin estão em classes diferentes se no exemplo que você passou eles pertencem à mesma classe?

hadsufhuadhsufhs..

eles sao chamados de classes diferentes..

B

Então faça uma dessas classes receber login como parâmetro, como expliquei acima.

libo8

eu fiz isso em uma dessas class e deu erro nessa parte…

new JFrame().setVisible(true);

libo8
libo8:
renrutal:
public class ClasseDeNegocio
{
  private Login login;
  public ClasseDeNegocio (Login login)
  {
    this.login = login;
  }

  public void setLogin(Login login)
  {
    this.login = login;
  }

  public void realizaNegocio(Login login)
  {
    // use o parâmetro login passado para fazer o que quiser.
    outrosMétodos(login);
  }
}

Aliás, por que mLogin e getLogin estão em classes diferentes se no exemplo que você passou eles pertencem à mesma classe?

hadsufhuadhsufhs..

eles sao chamados de classes diferentes..

consegue amigo.

pedi ajuda ao meu professor.. e consegui..

passei os valores por parametro e deu certo.. nao precisei usar o static...

Vlwww

Criado 11 de maio de 2008
Ultima resposta 14 de mai. de 2008
Respostas 15
Participantes 5