GETTERS E SETTERS (AJUDA)
12/06/2020
0
Estava criando um programa usando a herança e eu precisava usar os valores da minha classe BK na minha classe GT, mas só queria usar os valores então eu uso o Get, no entanto, não estou conseguindo usar.
Poderiam me ajudar, por favor.
Sou novo na programação.
OBS: Já tentei instanciar minha classe BK e não deu certo e está no mesmo pacote pq é protected.
**Classe BK - Declaração dos meus Getters e Setters, mas só quero usar o Get.**
// Getters e Setters para usar nas outras subclasses, com o modificador protected que só não pode usar por outros pacotes. protected int getValorConta() { return valorConta; } protected int getValorDaDivida() { return valorDaDivida; } protected void setValorConta(int valor) { valorConta = valor; } protected void setValorDaDivida(int valor) { valorDaDivida = valor; }
**Classe GT - Quero usar nesse método void.**
public void cobrarTodos() { Divida = getValorDaDivida(); Corrente = getValorConta(); if ( Divida == 0) { // Quando for igual a 0 não acontece nada, apenas apresente o valor da conta. Corrente = Corrente; } if ( Corrente >= Divida ) { Corrente = Corrente - Divida; } if ( Corrente < Divida) { Divida = Divida - Corrente; Corrente = 0; }
Lucas
Post mais votado
12/06/2020
mas o que acontece exatamente?
está retornando erro?
Minha ideia é por exemplo: se o número tanto de gerentes for igual a 20 ele não precisa fazer nada é só retornar falso, caso contrário
o gerente já consta no arranjo então usaria o cpf para verificar e se estiver não precisa ser inserido e o método retornaria falso e por último o gerente passado como parâmetro que vai ser adicionado não consta no arranjo ai o gerente precisa ser adicionado na posição numGerente, incrementaria 1 e retornaria verdadeiro.
Fiz outra classe só para testar o programa com o método main.
Acabei respondendo antes de você mandar isso.
Entendi tua dificuldade e acho que o problema é justamente isso que lhe mandei, verifique e confirme aqui, por favor!
Tinha faltado só mais uma classe que é o banco, que deixei o método adicionar gerente.
O adicionar gerente é a mesma coisa que adicionar cliente a diferença é q tem 10 gerentes e 20 clientes para cada gerente.
cada gerente pode atender 20 clientes.
CLASSE BANCO
public class Banco { private Gerente[] gerentes; private int numGerentes; /* Construtor da Classe Banco * Inicializa os dois atributos do objeto que esta sendo instanciado. */ Banco(){ gerentes = new Gerente[10]; numGerentes = 0; } /* Metodo para Imprimir informacoes gerais sobre o banco atual */ void imprimir(){ System.out.println("#########################################################################"); System.out.println("Imprimindo informacoes do banco."); System.out.println("Ha " + numGerentes + " gerente(s) neste banco."); Gerente ger; for (int g=0; g < numGerentes; g++){ ger = gerentes[g]; System.out.println("Gerente: " + ger.nome + "\\\\tCPF: " + ger.cpf); ger.imprimirClientes(); } System.out.println("#########################################################################"); } boolean adicionarGerente(Gerente gerente){ if ( this.numGerentes == 10) { return false; } for ( int p=0; p < numGerentes; p++) { // Perorrer o arranjo. if ( this.gerentes[p].cpf == gerente.cpf ) { return false; } } for( int n=0; n < numGerentes; n++) { if (gerente.cpf != this.gerentes[n].cpf){ gerentes[numGerentes] = gerente; numGerentes += 1; return true; } } } }
Cara, essa mensagem de erro "missing return statement" indica que algum método do seu programa não está contemplando todos os fluxos possíveis. Em outras palavras, em algum método seu (que exige retorno) existe um caminho que o fluxo pode seguir em que ele acabará não retornando nada.
pelo que analisei teu código, acredito que está na tua função AdicionarGerente. Percebe que você colocou alguns if's para verificar algumas condições, mas e se todas as condições forem falsas? pelo que percebi é esse o fluxo que está faltando. Falta você colocar um return em caso de todas as suas condições serem falsas.
Por mais que você garanta(através de outras funções e etc) que uma dessas condições será atendida, o seu compilador/debugger muitas vezes não tem como saber, então ele espera que você complete o fluxo inteiro.
Exemplo:
eu tenho uma função que soma dois numeros:
public void main() { int x=1, y=2; soma(x, y) } public int soma (int x, int y) { if(x>0) { return x+y } if(y>0) { return x+y } }
veja que nesse trecho simples, eu fiz duas verificações de propósito(obviamente isso é apenas um exemplo extremamente simples).
verifiquei se x é maior que zero, e verifiquei se y é maior que zero. na minha função main(), eu passei atribui aos parametros os valores 1 e 2. Portanto, teoricamente não existiria a possibilidade das minhas verificações falharem, certo? esse é o ponto... por mais que TEORICAMENTE não exista essa possibilidade, meu compilador/debugger não sabe disso. então ele espera que complete todos os fluxo possíveis para o meu método.
portanto, para resolver isso, minha função soma ficaria assim:
public int soma (int x, int y) { if(x>0) { return x+y; } if(y>0) { return x+y; } return x; }
Nesse caso estou contemplando todas as rotas possíveis, porque mesmo que minhas duas condições falhem, o meu código retornará um valor X.
Ricardo Arraes
Mais Posts
12/06/2020
Ricardo Arraes
mas o que acontece exatamente?
está retornando erro?
12/06/2020
Lucas
mas o que acontece exatamente?
está retornando erro?
Ricardo obrigado por me responder, então tava indo contra as regras usando um get com if ai declarei dois atributos globais, porém fiquei com outro problema, vou postar meu programa todo aqui, se você conseguir me ajudar agradeço.
12/06/2020
Lucas
mas o que acontece exatamente?
está retornando erro?
Primeiro criei duas interface que se chama InterfaceGerente e InterfaceCliente.
São os métodos que vou usar em ambas as classes.
InterfaceCliente
public interface InterfaceCliente { boolean obterEmprestimo(int valor); boolean pagarEmprestimo(int valor); boolean negativado(); boolean realizarSaque(int valor); }
InterfaceGerente
public interface InterfaceGerente { boolean adicionarCliente(Cliente cliente); void cobrarTodosEmprestimos(); }
12/06/2020
Lucas
mas o que acontece exatamente?
está retornando erro?
Ai criei uma classe pessoa q é minha super classe é uma classe abstrata e não pode ser instanciada, mas seus atributos vão ser herdados pela classe Cliente e Gerente.
Classe Pessoa
[code=java]public abstract class Pessoa { String nome; int cpf; Pessoa(String nome, int cpf){ this.nome = nome; this.cpf = cpf; }
abstract String retornaTipo();
}[/code]
12/06/2020
Lucas
mas o que acontece exatamente?
está retornando erro?
Depois por último criei duas classes a Gerente e Cliente que estão me dando muito trabalho e fiquei perdino nelas, principalmente no método adicionarCliente e adicionarGerente, que não estou conseguindo fazer, quero usar o atributo da classe pessoa que é o CPF para distinguir um do outro.
Classe Cliente
public class Cliente extends Pessoa implements InterfaceCliente{ static final int dividaMaxima = 30000; static final String tipo = "C"; private int valorContaCorrente; private int valorDaDivida; /* Construtor da Classe Cliente * Este construtor invoca o construtor da classe Pessoa e inicializa os dois atributos * do objeto que esta sendo instanciado. */ Cliente(String nome, int cpf, int valorInicial){ super(nome, cpf); valorContaCorrente = valorInicial; valorDaDivida = 0; } /* Metodo que retorna o valor do atributo tipo do objeto atual */ String retornaTipo() { return tipo; } // Getters e Setters para usar nas outras subclasses, com o modificador protected que só não pode usar por outros pacotes. protected int getValorContaCorrente() { return valorContaCorrente; } protected int getValorDaDivida() { return valorDaDivida; } protected void setValorContaCorrente(int valor) { valorContaCorrente = valor; } protected void setValorDaDivida(int valor) { valorDaDivida = valor; } public boolean obterEmprestimo(int valor) { if ( valor <= 0) { return false; } else if ( valor + valorDaDivida > dividaMaxima) { return false; } else { valor += valorDaDivida; valor += valorContaCorrente; return true; } } public boolean pagarEmprestimo(int valor) { if (valor <= 0) { return false; } else if ( valor > valorDaDivida || valor > valorContaCorrente) { return false; } else { valor -= valorDaDivida; valor -= valorContaCorrente; return true; } } public boolean negativado() { if ( valorContaCorrente < valorDaDivida) { return true; } else { return false; } } // Método para sacar public boolean realizarSaque(int valor) { if ( valor <= 0) { return false; } else if ( valor > valorContaCorrente) { return false; } else { valor -= valorContaCorrente; return true; } } }
12/06/2020
Lucas
mas o que acontece exatamente?
está retornando erro?
Classe Gerente
public class Gerente extends Pessoa implements InterfaceGerente{ private static final String tipo = "G"; private Cliente[] clientes; private int numClientes; private int valorContaCorrente; private int valorDaDivida; /* Construtor da Classe Gerente * Este construtor invoca o construtor da classe Pessoa e inicializa os dois atributos * do objeto que esta sendo instanciado. */ Gerente(String nome, int cpf){ super(nome, cpf); clientes = new Cliente[20]; numClientes = 0; } /* Metodo que retorna o valor do atributo tipo do objeto atual */ String retornaTipo() { return tipo; } /* Metodo para imprimir informacoes sobre os clientes gerenciados pelo gerente atual */ void imprimirClientes(){ Cliente atual; System.out.println("\\tNumero de clientes: " + numClientes); for (int c=0; c < numClientes; c++){ atual = clientes[c]; System.out.println("\\t" + (c+1) + "\\t" + atual.retornaTipo() + "\\t" + atual.nome + "\\t" + atual.cpf + "\\t" + atual.getValorContaCorrente() + "\\t" + atual.getValorDaDivida() + "\\t" + atual.negativado()); } } public boolean adicionarCliente(Cliente cliente) { if ( this.numClientes == 20) { return false; } for ( int j=0; j < numClientes; j++) { // Perorrer o arranjo. if ( clientes.cpf[j] == this.cpf ) { return false; } else { clientes[numClientes] = cliente; numClientes += 1; return true; } } } public void cobrarTodosEmprestimos() { if ( valorDaDivida == 0) { valorContaCorrente = valorContaCorrente; } if ( valorContaCorrente >= valorDaDivida ) { valorContaCorrente = valorContaCorrente - valorDaDivida; } if ( valorContaCorrente < valorDaDivida) { valorDaDivida = valorDaDivida - valorContaCorrente; valorContaCorrente = 0; } } }
12/06/2020
Lucas
mas o que acontece exatamente?
está retornando erro?
Minha ideia é por exemplo: se o número tanto de gerentes for igual a 20 ele não precisa fazer nada é só retornar falso, caso contrário
o gerente já consta no arranjo então usaria o cpf para verificar e se estiver não precisa ser inserido e o método retornaria falso e por último o gerente passado como parâmetro que vai ser adicionado não consta no arranjo ai o gerente precisa ser adicionado na posição numGerente, incrementaria 1 e retornaria verdadeiro.
Fiz outra classe só para testar o programa com o método main.
12/06/2020
Lucas
mas o que acontece exatamente?
está retornando erro?
Estou com problema nessa classe adicionar cliente e adicionar gerente.
12/06/2020
Ricardo Arraes
analisei rápido teu código e creio que encontrei um erro no método que você disse estar tendo dificuldade.
serie interessante se você encaminhasse a exceção que está retornando ou explicar exatamente qual a dificuldade que você está tendo.
Mas verifique se isso resolve:
Na classe Gerente, no método AdicionarCliente, verifique que você está indexando o atributo cpf em vez do array em si:
ERRADO:
if ( clientes.cpf[j] == this.cpf )
CORRETO:
if ( clientes[j].cpf == this.cpf )
12/06/2020
Ricardo Arraes
mas o que acontece exatamente?
está retornando erro?
Minha ideia é por exemplo: se o número tanto de gerentes for igual a 20 ele não precisa fazer nada é só retornar falso, caso contrário
o gerente já consta no arranjo então usaria o cpf para verificar e se estiver não precisa ser inserido e o método retornaria falso e por último o gerente passado como parâmetro que vai ser adicionado não consta no arranjo ai o gerente precisa ser adicionado na posição numGerente, incrementaria 1 e retornaria verdadeiro.
Fiz outra classe só para testar o programa com o método main.
Acabei respondendo antes de você mandar isso.
Entendi tua dificuldade e acho que o problema é justamente isso que lhe mandei, verifique e confirme aqui, por favor!
12/06/2020
Lucas
mas o que acontece exatamente?
está retornando erro?
Minha ideia é por exemplo: se o número tanto de gerentes for igual a 20 ele não precisa fazer nada é só retornar falso, caso contrário
o gerente já consta no arranjo então usaria o cpf para verificar e se estiver não precisa ser inserido e o método retornaria falso e por último o gerente passado como parâmetro que vai ser adicionado não consta no arranjo ai o gerente precisa ser adicionado na posição numGerente, incrementaria 1 e retornaria verdadeiro.
Fiz outra classe só para testar o programa com o método main.
Acabei respondendo antes de você mandar isso.
Entendi tua dificuldade e acho que o problema é justamente isso que lhe mandei, verifique e confirme aqui, por favor!
Acabou não resolvendo, fala "missing return startament", mas verifiquei mais de 6 vezes e não tem chaves dispersa no código, não sei se eu interpretei certo através do código rs.
12/06/2020
Lucas
mas o que acontece exatamente?
está retornando erro?
Minha ideia é por exemplo: se o número tanto de gerentes for igual a 20 ele não precisa fazer nada é só retornar falso, caso contrário
o gerente já consta no arranjo então usaria o cpf para verificar e se estiver não precisa ser inserido e o método retornaria falso e por último o gerente passado como parâmetro que vai ser adicionado não consta no arranjo ai o gerente precisa ser adicionado na posição numGerente, incrementaria 1 e retornaria verdadeiro.
Fiz outra classe só para testar o programa com o método main.
Acabei respondendo antes de você mandar isso.
Entendi tua dificuldade e acho que o problema é justamente isso que lhe mandei, verifique e confirme aqui, por favor!
Tinha faltado só mais uma classe que é o banco, que deixei o método adicionar gerente.
O adicionar gerente é a mesma coisa que adicionar cliente a diferença é q tem 10 gerentes e 20 clientes para cada gerente.
cada gerente pode atender 20 clientes.
CLASSE BANCO
public class Banco { private Gerente[] gerentes; private int numGerentes; /* Construtor da Classe Banco * Inicializa os dois atributos do objeto que esta sendo instanciado. */ Banco(){ gerentes = new Gerente[10]; numGerentes = 0; } /* Metodo para Imprimir informacoes gerais sobre o banco atual */ void imprimir(){ System.out.println("#########################################################################"); System.out.println("Imprimindo informacoes do banco."); System.out.println("Ha " + numGerentes + " gerente(s) neste banco."); Gerente ger; for (int g=0; g < numGerentes; g++){ ger = gerentes[g]; System.out.println("Gerente: " + ger.nome + "\\tCPF: " + ger.cpf); ger.imprimirClientes(); } System.out.println("#########################################################################"); } boolean adicionarGerente(Gerente gerente){ if ( this.numGerentes == 10) { return false; } for ( int p=0; p < numGerentes; p++) { // Perorrer o arranjo. if ( this.gerentes[p].cpf == gerente.cpf ) { return false; } } for( int n=0; n < numGerentes; n++) { if (gerente.cpf != this.gerentes[n].cpf){ gerentes[numGerentes] = gerente; numGerentes += 1; return true; } } } }
12/06/2020
Lucas
mas o que acontece exatamente?
está retornando erro?
Minha ideia é por exemplo: se o número tanto de gerentes for igual a 20 ele não precisa fazer nada é só retornar falso, caso contrário
o gerente já consta no arranjo então usaria o cpf para verificar e se estiver não precisa ser inserido e o método retornaria falso e por último o gerente passado como parâmetro que vai ser adicionado não consta no arranjo ai o gerente precisa ser adicionado na posição numGerente, incrementaria 1 e retornaria verdadeiro.
Fiz outra classe só para testar o programa com o método main.
Acabei respondendo antes de você mandar isso.
Entendi tua dificuldade e acho que o problema é justamente isso que lhe mandei, verifique e confirme aqui, por favor!
Troquei meu else pelo for não deu certo ainda e verifiquei de novo meu código e deixei gerente.cpf é o q quero adicionar e os gerentes[].cpf é os gerentes do meu arranjo, só que da ainda esse "missing return startament".
13/06/2020
Lucas
mas o que acontece exatamente?
está retornando erro?
Minha ideia é por exemplo: se o número tanto de gerentes for igual a 20 ele não precisa fazer nada é só retornar falso, caso contrário
o gerente já consta no arranjo então usaria o cpf para verificar e se estiver não precisa ser inserido e o método retornaria falso e por último o gerente passado como parâmetro que vai ser adicionado não consta no arranjo ai o gerente precisa ser adicionado na posição numGerente, incrementaria 1 e retornaria verdadeiro.
Fiz outra classe só para testar o programa com o método main.
Acabei respondendo antes de você mandar isso.
Entendi tua dificuldade e acho que o problema é justamente isso que lhe mandei, verifique e confirme aqui, por favor!
Tinha faltado só mais uma classe que é o banco, que deixei o método adicionar gerente.
O adicionar gerente é a mesma coisa que adicionar cliente a diferença é q tem 10 gerentes e 20 clientes para cada gerente.
cada gerente pode atender 20 clientes.
CLASSE BANCO
public class Banco { private Gerente[] gerentes; private int numGerentes; /* Construtor da Classe Banco * Inicializa os dois atributos do objeto que esta sendo instanciado. */ Banco(){ gerentes = new Gerente[10]; numGerentes = 0; } /* Metodo para Imprimir informacoes gerais sobre o banco atual */ void imprimir(){ System.out.println("#########################################################################"); System.out.println("Imprimindo informacoes do banco."); System.out.println("Ha " + numGerentes + " gerente(s) neste banco."); Gerente ger; for (int g=0; g < numGerentes; g++){ ger = gerentes[g]; System.out.println("Gerente: " + ger.nome + "\\\\\\\\tCPF: " + ger.cpf); ger.imprimirClientes(); } System.out.println("#########################################################################"); } boolean adicionarGerente(Gerente gerente){ if ( this.numGerentes == 10) { return false; } for ( int p=0; p < numGerentes; p++) { // Perorrer o arranjo. if ( this.gerentes[p].cpf == gerente.cpf ) { return false; } } for( int n=0; n < numGerentes; n++) { if (gerente.cpf != this.gerentes[n].cpf){ gerentes[numGerentes] = gerente; numGerentes += 1; return true; } } } }
Cara, essa mensagem de erro "missing return statement" indica que algum método do seu programa não está contemplando todos os fluxos possíveis. Em outras palavras, em algum método seu (que exige retorno) existe um caminho que o fluxo pode seguir em que ele acabará não retornando nada.
pelo que analisei teu código, acredito que está na tua função AdicionarGerente. Percebe que você colocou alguns if's para verificar algumas condições, mas e se todas as condições forem falsas? pelo que percebi é esse o fluxo que está faltando. Falta você colocar um return em caso de todas as suas condições serem falsas.
Por mais que você garanta(através de outras funções e etc) que uma dessas condições será atendida, o seu compilador/debugger muitas vezes não tem como saber, então ele espera que você complete o fluxo inteiro.
Exemplo:
eu tenho uma função que soma dois numeros:
public void main() { int x=1, y=2; soma(x, y) } public int soma (int x, int y) { if(x>0) { return x+y } if(y>0) { return x+y } }
veja que nesse trecho simples, eu fiz duas verificações de propósito(obviamente isso é apenas um exemplo extremamente simples).
verifiquei se x é maior que zero, e verifiquei se y é maior que zero. na minha função main(), eu passei atribui aos parametros os valores 1 e 2. Portanto, teoricamente não existiria a possibilidade das minhas verificações falharem, certo? esse é o ponto... por mais que TEORICAMENTE não exista essa possibilidade, meu compilador/debugger não sabe disso. então ele espera que complete todos os fluxo possíveis para o meu método.
portanto, para resolver isso, minha função soma ficaria assim:
public int soma (int x, int y) { if(x>0) { return x+y; } if(y>0) { return x+y; } return x; }
Nesse caso estou contemplando todas as rotas possíveis, porque mesmo que minhas duas condições falhem, o meu código retornará um valor X.
Ricardo muito obrigado, deu certo agora, posso prosseguir com o andamento do meu programa agora.
Agradeço muito cara você é demais, continue assim.
13/06/2020
Ricardo Arraes
mas o que acontece exatamente?
está retornando erro?
Minha ideia é por exemplo: se o número tanto de gerentes for igual a 20 ele não precisa fazer nada é só retornar falso, caso contrário
o gerente já consta no arranjo então usaria o cpf para verificar e se estiver não precisa ser inserido e o método retornaria falso e por último o gerente passado como parâmetro que vai ser adicionado não consta no arranjo ai o gerente precisa ser adicionado na posição numGerente, incrementaria 1 e retornaria verdadeiro.
Fiz outra classe só para testar o programa com o método main.
Acabei respondendo antes de você mandar isso.
Entendi tua dificuldade e acho que o problema é justamente isso que lhe mandei, verifique e confirme aqui, por favor!
Tinha faltado só mais uma classe que é o banco, que deixei o método adicionar gerente.
O adicionar gerente é a mesma coisa que adicionar cliente a diferença é q tem 10 gerentes e 20 clientes para cada gerente.
cada gerente pode atender 20 clientes.
CLASSE BANCO
public class Banco { private Gerente[] gerentes; private int numGerentes; /* Construtor da Classe Banco * Inicializa os dois atributos do objeto que esta sendo instanciado. */ Banco(){ gerentes = new Gerente[10]; numGerentes = 0; } /* Metodo para Imprimir informacoes gerais sobre o banco atual */ void imprimir(){ System.out.println("#########################################################################"); System.out.println("Imprimindo informacoes do banco."); System.out.println("Ha " + numGerentes + " gerente(s) neste banco."); Gerente ger; for (int g=0; g < numGerentes; g++){ ger = gerentes[g]; System.out.println("Gerente: " + ger.nome + "\\\\\\\\\\\\\\\\tCPF: " + ger.cpf); ger.imprimirClientes(); } System.out.println("#########################################################################"); } boolean adicionarGerente(Gerente gerente){ if ( this.numGerentes == 10) { return false; } for ( int p=0; p < numGerentes; p++) { // Perorrer o arranjo. if ( this.gerentes[p].cpf == gerente.cpf ) { return false; } } for( int n=0; n < numGerentes; n++) { if (gerente.cpf != this.gerentes[n].cpf){ gerentes[numGerentes] = gerente; numGerentes += 1; return true; } } } }
Cara, essa mensagem de erro "missing return statement" indica que algum método do seu programa não está contemplando todos os fluxos possíveis. Em outras palavras, em algum método seu (que exige retorno) existe um caminho que o fluxo pode seguir em que ele acabará não retornando nada.
pelo que analisei teu código, acredito que está na tua função AdicionarGerente. Percebe que você colocou alguns if's para verificar algumas condições, mas e se todas as condições forem falsas? pelo que percebi é esse o fluxo que está faltando. Falta você colocar um return em caso de todas as suas condições serem falsas.
Por mais que você garanta(através de outras funções e etc) que uma dessas condições será atendida, o seu compilador/debugger muitas vezes não tem como saber, então ele espera que você complete o fluxo inteiro.
Exemplo:
eu tenho uma função que soma dois numeros:
public void main() { int x=1, y=2; soma(x, y) } public int soma (int x, int y) { if(x>0) { return x+y } if(y>0) { return x+y } }
veja que nesse trecho simples, eu fiz duas verificações de propósito(obviamente isso é apenas um exemplo extremamente simples).
verifiquei se x é maior que zero, e verifiquei se y é maior que zero. na minha função main(), eu passei atribui aos parametros os valores 1 e 2. Portanto, teoricamente não existiria a possibilidade das minhas verificações falharem, certo? esse é o ponto... por mais que TEORICAMENTE não exista essa possibilidade, meu compilador/debugger não sabe disso. então ele espera que complete todos os fluxo possíveis para o meu método.
portanto, para resolver isso, minha função soma ficaria assim:
public int soma (int x, int y) { if(x>0) { return x+y; } if(y>0) { return x+y; } return x; }
Nesse caso estou contemplando todas as rotas possíveis, porque mesmo que minhas duas condições falhem, o meu código retornará um valor X.
Ricardo muito obrigado, deu certo agora, posso prosseguir com o andamento do meu programa agora.
Agradeço muito cara você é demais, continue assim.
de nada! só não esquece de curtir aqui pra galera saber que teve solução :)
boa sorte!
Clique aqui para fazer login e interagir na Comunidade :)