Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Dificuldade com getters e setters.

Estou com dificuldade para entender o que acontece nessa classe que estou resolvendo da aula 5 (Modificadores). Compilo a classe normalmente, porém, quando da visualização do método, onde era para imprimir o nome do funcionário, imprime o RG dele, e no RG sai null. O que estou fazendo de errado? Segue abaixo os códigos para análise:

public class Funcionario {
    private Data dataEntrada;  
    private String nome, rg, depto;
    private double salario;

    public void setNome(String nome){
       this.nome = nome;
    } 

    public void setDepto(String depto){
        this.depto = depto;
    } 

    public void setSalario(double salario){
        this.salario = salario;
    }

    public void setRg(String rg){
        this.nome = rg;
    }

    public String getNome(){
        return this.nome;
    } 

    public String getDepto(){
        return this.depto;
    } 

    public double getSalario(){
        return this.salario;
    } 

    /*    public String getData(){
        return this.dataEntrada.getFormatada();
    } */

    public String getRg(){
        return this.rg;
    }

    void recebeAumento(double porcento) {
        double aumento;
        aumento = this.salario * (porcento/100);
        this.salario += (this.salario * porcento/100);
        System.out.println(" ");
        System.out.println("O valor do aumento e R$ " + aumento);
        System.out.println("O valor do novo salario e R$ " + this.salario);
        System.out.println(" ");       
    }

    void calculaGanhoAnual() {
        double salarioAnual;
        salarioAnual = this.salario * 12;
        System.out.println(" ");
        System.out.println("O valor do salario anual e R$ " + salarioAnual);
        System.out.println(" ");        
    }

    void mostra() {
        System.out.println("O nome do funcionario: " + this.nome);
        System.out.println("Departamento: " + this.depto);
        System.out.println("RG: "+ this.rg);
        System.out.println("Data de entrada: " + this.getDataEntrada().getDia() + "/" 
                + this.getDataEntrada().getMes() + "/" + this.getDataEntrada().getAno());
        System.out.println("Salario atual: " + this.salario);
        System.out.println(" ");        
    }

    public Data getDataEntrada() {
        return this.dataEntrada;
    }

    public void setDataEntrada(Data dta) {
        // TODO Auto-generated method stub
        this.dataEntrada = dta;

    }

}

public class Data {
    private int dia, mes, ano = 0;

    public void preencheData (int dia, int mes, int ano) {
        this.dia = dia;
        this.mes = mes;
        this.ano = ano;
    }

    public String getDataFormatada(int dia, int mes, int ano) {
        return this.dia + "/" + this.mes + "/" + this.ano;
    }

    public int getDia() {
        return dia;
    }

    public void setDia(int dia) {
        this.dia = dia;
    }

    public int getMes() {
        return mes;
    }

    public void setMes(int mes) {
        this.mes = mes;
    }

    public int getAno() {
        return ano;
    }

    public void setAno(int ano) {
        this.ano = ano;
    }
}

public class TestaFuncionario {
    public static void main(String[] args) {
        Funcionario f1 = new Funcionario();
        Data dta = new Data();

        dta.preencheData(15, 8, 2012);

        f1.setNome("João");
        f1.setDepto("Cobrança");
        f1.setRg("99.897.569");
        f1.setSalario(1300);
        f1.setDataEntrada(dta);

        f1.mostra();

    }
}

Grato pela ajuda.

6 respostas
solução!

o metodo setRg está setando na variável nome:

public void setRg(String rg){ this.nome = rg; }

deveria ser

public void setRg(String rg){ this.rg = rg; }

você colocou errado ae, tem quer ser (this.rg = rg);

Não Daniel, a correção do Elton está correta, faltou apenas identar o código pra ficar mais organizado:

public void setRg(String rg){ 
   this.rg = rg; 
}

a sua resposta é que tá equivocada.

Opa João,

Obrigado. Eu deixei o código indentado, só que quando colei o texto aqui ele comeu as linhas, ainda aprendendo como usar o fórum daqui.

Obrigado pela ajuda pessoal. Olhei várias vezes o código e não me atentei para o detalhe do atributo. Valeu mesmo!

 public void setRg(String rg){
this.nome = rg;
}

Altere o this.nome para this.rg = rg;