Metodo retornando valor incorreto

[code]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;
}

}
[/code]
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

Ola,

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

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

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

private static int l = 0;

:smiley: Abraços

[quote=Mauro Filho]Tente mudar a sua variável l para estática

private static int l = 0;

:smiley: Abraços
[/quote]

mt obrigado amigo…

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

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.

ambos estao em classes diferentes…

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

confirm=1; log.mLogin(confirm);

e esse chama:

[code]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");  
    }
    
}[/code]

[quote=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:

[code]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");  
    }
    
}[/code][/quote]

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

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

[quote=Javabuntu][quote=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:

[code]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");  
    }
    
}[/code][/quote]

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

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
[/quote]

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??

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.

e como eu faco isso?

estou comecando na linguagem java… hehe :smiley:

[code]
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);
}
}[/code]

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

[quote=renrutal][code]
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);
}
}[/code]

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

hadsufhuadhsufhs…

eles sao chamados de classes diferentes…

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

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

new JFrame().setVisible(true);

[quote=libo8][quote=renrutal][code]
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);
}
}[/code]

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

hadsufhuadhsufhs…

eles sao chamados de classes diferentes… [/quote]

consegue amigo.

pedi ajuda ao meu professor… e consegui…

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

Vlwww