Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Problema com encapsulamento em classes referenciadas.

Não consigo fazer a "data de entrada" aparecer.. oq q eu devo fazer.

class Funcionario{
    private String nome;
    private String departamento;
    private double salario;
    private Data dataEntrada;
    private String rg;
    private int identificador;

    private static int incrementador = 1;

    public Funcionario(){
        this.identificador = incrementador++;
    }

    public int getIdentificador(){
        return this.identificador;
    }

    public Funcionario(String nome, String departamento, double salario){
        this.nome = nome;
    }

    public void setAumento(double aumento){
        this.salario += aumento;
    }

    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 void setDataEntrada(Data dataEntrada){
        this.dataEntrada = dataEntrada;
    }

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


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

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

    public void mostra(){

        System.out.println("Nome: " + this.nome);
        System.out.println("Departamento: " + this.departamento);
        System.out.println("Salario: " + this.salario);
        System.out.println("Data de Entrada: " + this.dataEntrada.getFormatada());
        System.out.println("RG: " + this.rg);
        System.out.println("Numero de identifacao: " + this.identificador);
        System.out.println("");
    }
}

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

    public Empresa (int tamanho){
        this.empregados = new Funcionario[tamanho];
    }

    public Empresa (){

    }

    public String getNomeEmpresa(){
        return this.nomeEmpresa;
    }

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

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

    public void setCnpj(double cnpj){
        this.cnpj = cnpj;
    }

    public Funcionario getEmpregados(int posicao){
        return this.empregados[posicao];
    }

    public void setEmpregados(Funcionario empregados[]){
        this.empregados = empregados;
    }

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

    void mostraEmpregados(){
        for (int i = 0;i<this.empregados.length;i++){
            Funcionario empregados = this.empregados[i];
            if(empregados == null){
                continue;
            }
            System.out.println("Funcionario na posicao: " + i);
            System.out.println("Nome do funcionario: " + empregados.getNome());
            System.out.println("R$ " + empregados.getSalario());
            System.out.println("");
        }

    }

    void mostraTodasAsInformacoes(){
        for (int i=0;i<this.livre;i++){
            if(empregados[i] == null){
                continue;
            }
            this.empregados[i].mostra();
        }
    }

    boolean contem(Funcionario f){
        for (int i=0;i<this.livre;i++){
            if (this.empregados[i] == f){
                return true;
            }
        }
        return false;
    }
}

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

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

        if (! isDataViavel(dia, mes, ano)) {
        System.out.println("A data " + getFormatada() + " não existe!");
        }
    }

    private boolean isDataViavel(int dia, int mes, int ano) {
        if (dia <= 0 || mes <= 0 || mes > 12 || ano <= 0) {
            return false;
        }

        int ultimoDiaDoMes = 31; // por padrao são 31 dias
        if (mes == 4 || mes == 6 || mes == 9 || mes == 11 ) {
            ultimoDiaDoMes = 30;
        } else if (mes == 2) {
            ultimoDiaDoMes = 28;
            if((ano % 400 == 0) || ((ano % 4 == 0) && (ano % 100 != 0))){
                ultimoDiaDoMes = 29;
            }
        }
        if (dia > ultimoDiaDoMes) {
            return false;
        }
        return true;
    }

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

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

        Empresa empresa = new Empresa();
        Funcionario empregados[] = new Funcionario[10];
        empresa.setEmpregados(empregados);

        Funcionario f1 = new Funcionario();

        f1.setNome("teste");
        f1.setSalario(1000);

        Data data = new Data();
        data.preencheData(1,1,2016);

        empresa.adiciona(f1);

        Funcionario f2 = new Funcionario();    
        f2.setNome("teste2");
        f2.setSalario(2000);

        Data date = new Data();
        date.preencheData(1,1,2016);

        empresa.adiciona(f2);


        //empresa.getEmpregados(0).mostra();
        //empresa.getEmpregados(1).mostra();

        empresa.mostraEmpregados();

        System.out.println (empresa.contem(f1));
    }
}
1 resposta
solução!

Amigo, bom dia.

Está faltando algumas coisinhas no seu código, nada de grave não. Mas vamos lá...

1) Cada funcionário possui a propriedade de data de entrada e em nenhum momento você a preenche.

veja como seria:

        f1.setNome("teste");
        f1.setSalario(1000);

        Data data = new Data();
        data.preencheData(1,1,2016);

        f1.setDataEntrada(data);
        empresa.adiciona(f1);

        Funcionario f2 = new Funcionario();    
        f2.setNome("teste2");
        f2.setSalario(2000);

        Data date = new Data();
        date.preencheData(1,1,2016);

        f2.setDataEntrada(date);
        empresa.adiciona(f2);

e ficou faltando adicionar a linha que exibe a propriedade no método mostraEmpregados

veja abaixo:

void mostraEmpregados(){
        for (int i = 0;i<this.empregados.length;i++){
            Funcionario empregados = this.empregados[i];
            if(empregados == null){
                continue;
            }
            System.out.println("Funcionario na posicao: " + i);
            System.out.println("Nome do funcionario: " + empregados.getNome());
            System.out.println("R$ " + empregados.getSalario());
            System.out.println("Data entrada: " + empregados.getDataEntrada().getFormatada());
            System.out.println("");
        }

    }


Espero ter ajudado.