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

Dúvida no Ex. 3 da Aula 5 - Modificadores de acesso - Data de Entrada

Estou com problemas para definir semanticamente a data de entrada. Não sei como prosseguir agora que definimos um ponteiro apontando para um outro ponteiro e ler e definir valores privados.

class Funcionario {
    private String nome;
    private String departamento;
    private String rg;
    private double salario;
    private Data dataDeEntrada;

    public double recebeAumento() {
        return this.salario += (this.salario / 100) * 20;
    }

    public void mostra() {
        System.out.println("--------------------------------------------------------------------------------");
        System.out.println("Nome: " + this.getNome());
        System.out.println("Departamento: " + this.getDepartamento());
        System.out.println("RG: " + this.getRg());
        System.out.println("Salário Antigo: " + this.getSalario());
        System.out.println("Salário Atual: " + this.recebeAumento());
        System.out.println("Salário Anual: " + this.getGanhoAnual());
        System.out.println("Data de entrada no banco: " + this.getDataDeEntrada().getFormatada());
        System.out.println("--------------------------------------------------------------------------------");
    }

    public double getGanhoAnual() {
        return this.salario * 12;
    }

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

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

    public String getDepartamento() {
        return this.departamento;
    }

    public String setDepartamento(String departamento) {
        this.departamento = departamento;
    }

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

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

    public Data getDataDeEntrada() {
        return this.dataDeEntrada();
    }

    public void setDataDeEntrada(Data dataEntrada) {
        this.dataEntrada = dataEntrada;
    }

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

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

class Data {
    int dia;
    int mes;
    int ano;

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

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

class Programa {
    public static void main(String[] args) {

        Funcionario thiago = new Funcionario();    

        thiago.setNome("Thiago Cunha");
        thiago.setDepartamento("Desenvolvimento");
        thiago.setRg("23237777-7");

        thiago.getSalario(1000.0);
        thiago.dataDeEntrada = new Data();
        thiago.dataEntrada.setDataDeEntrada();
        thiago.mostra();

    }
}
5 respostas

Olá Thiago! O correto, pelo seu código, para se colocar a data de entrada e mostrar as informações seria fazer da seguinte forma:

Funcionario thiago = new Funcionario();    

thiago.setNome("Thiago Cunha");
thiago.setDepartamento("Desenvolvimento");
thiago.setRg("23237777-7");
thiago.setSalario(1000.0);

Data dataDeEntrada = new Data();
dataDeEntrada.preenchadata(3, 1, 2016);

thiago.setDataDeEntrada(dataDeEntrada);
thiago.mostra();

Enfim, espero ter ajudado! Se ainda possuir alguma dúvida, basta perguntar. Bons estudos!

Infelizmente ainda parece dar problema...aparece uns erros bizarros que não estou conseguindo solucionar.

Funcionario.java:53: error: cannot find symbol
        return this.dataDeEntrada();
                   ^
  symbol: method dataDeEntrada()
Funcionario.java:98: error: salario has private access in Funcionario
            System.out.println("R$" + this.empregados[i].salario);
                                                        ^
Funcionario.java:103: error: incompatible types: unexpected return value
        return this.cnpj;
                   ^
Funcionario.java:119: error: method getSalario in class Funcionario cannot be applied to given types;
        thiago.getSalario(1000.0);
              ^
  required: no arguments
  found: double
  reason: actual and formal argument lists differ in length
4 errors

class Funcionario {
    private String nome;
    private String departamento;
    private String rg;
    private double salario;
    private Data dataDeEntrada;

    public double recebeAumento() {
        return this.salario += (this.salario / 100) * 20;
    }

    public void mostra() {
        System.out.println("--------------------------------------------------------------------------------");
        System.out.println("Nome: " + this.getNome());
        System.out.println("Departamento: " + this.getDepartamento());
        System.out.println("RG: " + this.getRg());
        System.out.println("Salário Antigo: " + this.getSalario());
        System.out.println("Salário Atual: " + this.recebeAumento());
        System.out.println("Salário Anual: " + this.getGanhoAnual());
        System.out.println("Data de entrada no banco: " + this.getDataDeEntrada().getFormatada());
        System.out.println("--------------------------------------------------------------------------------");
    }

    public double getGanhoAnual() {
        return this.salario * 12;
    }

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

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

    public String getDepartamento() {
        return this.departamento;
    }

    public String setDepartamento(String departamento) {
        this.departamento = departamento;
    }

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

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

    public Data getDataDeEntrada() {
        return this.dataDeEntrada();
    }

    public void setDataDeEntrada(Data dataEntrada) {
        this.dataDeEntrada = dataEntrada;
    }

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

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

class Data {
    int dia;
    int mes;
    int ano;

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

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

class Empresa {
    private String cnpj;
    private Funcionario[] empregados;
    private int livre = 0;

    public void adiciona(Funcionario f) {
        this.empregados[this.livre] = f;
        this.livre++;
    }

    public void mostraEmpregados() {
        for (int i = 0; i < this.livre; i++) {
            System.out.println("Funcionário na posição " + i);
            System.out.println("R$" + this.empregados[i].salario);
        }
    }

    public Empresa(String cnpj) {
        return this.cnpj;
    }

    public String getCnpj() {
        return this.cnpj;
    }
}

class Programa {
    public static void main(String[] args) {

        Funcionario thiago = new Funcionario();    

        thiago.setNome("Thiago Cunha");
        thiago.setDepartamento("Desenvolvimento");
        thiago.setRg("23237777-7");
        thiago.getSalario(1000.0);

        Data dataDeEntrada = new Data();
        dataDeEntrada.preenchadata(3, 1, 2016);
        thiago.setDataDeEntrada(dataDeEntrada);

        thiago.mostra();

    }
}

Olá Thiago, estes erros são estão sendo causados por alguns equívocos que você cometeu.

Veja bem, dataDeEntrada é uma variável de instancia e não um método. Por isso, ao você fazer:

    public Data getDataDeEntrada() {
        return this.dataDeEntrada();
    }

Está incorreto, resultando em um erro. O correto seria:

    public Data getDataDeEntrada() {
        return this.dataDeEntrada;
    }

O segundo erro é devido ao atributo salario da classe Funcionario que é private. Sendo assim, ele só pode ser acessado dentro da própria classe. Então o correto seria você utilizar o getSalario() ficando seu método mostraEmpregados() da seguinte forma:

public void mostraEmpregados() {
        for (int i = 0; i < this.livre; i++) {
            System.out.println("Funcionário na posição " + i);
            System.out.println("R$" + this.empregados[i].getSalario());
        }
    }

Outro erro é na classe Empresa. Você pôs no construtor da classe a palavra reservada return, porém em um Construtor não se retorna nenhum valor. O Corretor seria estar da seguinte forma:

    public Empresa(String cnpj) {
        this.cnpj = cnpj;
    }

O ultimo erro é causado pois ao invês de utilizar o método setSalario() você utilizou getSalario(). O correto seria estar:

thiago.setSalario(1000.0);

Enfim, espero ter ajudado! Bons Estudos!

solução!

Nossa! Esse lance de orientação a objetos e definição dos modificadores de acesso é bem mais complicado que pensei. Agradeço a sua ajuda!!! Veja como ficou o ultimo código compilado e funcionando:

class Funcionario {
    private String nome;
    private String departamento;
    private String rg;
    private double salario;
    private Data dataDeEntrada;

    public double recebeAumento() {
        return this.salario += (this.salario / 100) * 20;
    }

    public void mostra() {
        System.out.println("--------------------------------------------------------------------------------");
        System.out.println("Nome: " + this.getNome());
        System.out.println("Departamento: " + this.getDepartamento());
        System.out.println("RG: " + this.getRg());
        System.out.println("Salário Antigo: " + this.getSalario());
        System.out.println("Salário Atual: " + this.recebeAumento());
        System.out.println("Salário Anual: " + this.getGanhoAnual());
        System.out.println("Data de entrada no banco: " + this.getDataDeEntrada().getFormatada());
        System.out.println("--------------------------------------------------------------------------------");
    }

    public double getGanhoAnual() {
        return this.salario * 12;
    }

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

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

    public String getDepartamento() {
        return this.departamento;
    }

    public void setDepartamento(String departamento) {
        this.departamento = departamento;
    }

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

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

    public Data getDataDeEntrada() {
        return this.dataDeEntrada;
    }

    public void setDataDeEntrada(Data dataEntrada) {
        this.dataDeEntrada = dataEntrada;
    }

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

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

class Data {
    int dia;
    int mes;
    int ano;

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

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

class Empresa {
    private String cnpj;
    private Funcionario[] empregados;
    private int livre = 0;

    public void adiciona(Funcionario f) {
        this.empregados[this.livre] = f;
        this.livre++;
    }

    public void mostraEmpregados() {
        for (int i = 0; i < this.livre; i++) {
            System.out.println("Funcionário na posição " + i);
            System.out.println("R$" + this.empregados[i].getSalario());
        }
    }

    public Empresa(String cnpj) {
        this.cnpj = cnpj;
    }

    public String getCnpj() {
        return this.cnpj;
    }
}

class Programa {
    public static void main(String[] args) {

        Funcionario thiago = new Funcionario();    

        thiago.setNome("Thiago Cunha");
        thiago.setDepartamento("Desenvolvimento");
        thiago.setRg("23237777-7");
        thiago.setSalario(1000.0);

        Data dataDeEntrada = new Data();
        dataDeEntrada.preenchadata(3, 1, 2016);
        thiago.setDataDeEntrada(dataDeEntrada);

        thiago.mostra();

    }
}