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

Arrays [] - Java - Dúvida.

Pessoal, boa noite. Estou tentando resolver um problema, por favor podem me ajudar?

Segue o código:


public class Funcionario2 {
    PessoaFuncionario funcionario;
    DescricaoEmpresa empresa;
    DataFuncionarioEmpresa data;
    double salario;
    double aumentoSalario;

    // Métodos para o funcionário relacionados a salários... //
    void salarioFuncionario(double salario) {
        this.salario = salario;
    }

    void funcionarioRecebeAumento(double aumentoSalario) {
        this.aumentoSalario += aumentoSalario;
    }

    double calculaSalarioAnual() {
        return this.salario *= 12;
    }

    void exibeInformacoesGerais() {

        for (int i = 0; i < this.empresa.funcionarios.length; i++) {
            Funcionario2 funcionario = this.empresa.funcionarios[i];
            if (funcionario == null)
                continue;        

        System.out.println();
        System.out.println(">>>>>>>>>>>>EMPRESA<<<<<<<<<<");
        System.out.println();
        System.out.println("Empresa: " + this.empresa.nomeEmpresa + "\nCNPJ: "
                + this.empresa.cnpjEmpresa + "\nContato empresa: "
                + this.empresa.contatoEmpresa);

        System.out.println();
        System.out.println(">>>>>>>>>>DADOS DO FUNCIONÁRIO<<<<<<<<<");
        System.out.println();
        System.out.println("Nome Funcionário: " + this.funcionario.nome
                + "\nCPF: " + this.funcionario.cpf + "\nRG:"
                + this.funcionario.rg + "\nContato: "
                + this.funcionario.contato + "\nIdade: "
                + this.funcionario.idade + "\nSexo: " + this.funcionario.sexo
                + "\nData de entrada:" + this.data.dataFormatada());

        System.out.println();
        System.out.println(">>>>>>>>>>>>PAGAMENTO FUNCIONÀRIO<<<<<<<<<<<<");
        System.out.println();
        System.out.println("Salário: " + salario + "\nSalário com Aumento: "
                + this.aumentoSalario + "\nSalário Anual: "
                + calculaSalarioAnual());
        }
    }

}

class PessoaFuncionario {

    String nome;
    String rg;
    String cpf;
    String contato;
    char sexo;
    int idade;

}

class DescricaoEmpresa {
    // Criando o Array porque todo array é um objeto..
    // Criando o array porquê não sabemos a quantidade de funcionarios na empresa.
    Funcionario2[] funcionarios;
    String nomeEmpresa;
    String cnpjEmpresa;
    String contatoEmpresa;



}

class DataFuncionarioEmpresa {
    int dia, mes, ano;

    void dataFuncionarioEmpresa(int diaData, int mesData, int anoData) {

        this.dia = diaData;
        this.mes = mesData;
        this.ano = anoData;
    }

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

}

Classe Main:

public class Funcionario2_Main {

    public static void main(String[] args) {

        Funcionario2 f1 = new Funcionario2();
        DescricaoEmpresa empresa = new DescricaoEmpresa();

        // Criando array..
        empresa.funcionarios = new Funcionario2[2];
        empresa.funcionarios[0] = new Funcionario2();

        f1.empresa = new DescricaoEmpresa();
        f1.empresa.nomeEmpresa = "Elementary 01";
        f1.empresa.cnpjEmpresa = "000.000.000-12";
        f1.empresa.contatoEmpresa = "3347-1334";

        // Criando referência para o objeto PessoaFuncionario.

        empresa.funcionarios[0].funcionario.nome = "Felipe Portela";
        empresa.funcionarios[0].funcionario.cpf = "000.111.222-34";
        empresa.funcionarios[0].funcionario.rg = "1133.213";
        empresa.funcionarios[0].funcionario.contato = "(61) 9383 -6998";
        empresa.funcionarios[0].funcionario.idade = 20;
        empresa.funcionarios[0].funcionario.sexo = 'M';

        /*
         * f1.funcionario = new PessoaFuncionario(); f1.data = new
         * DataFuncionarioEmpresa();
         * 
         * f1.funcionario.nome = "Felipe Portela"; f1.funcionario.cpf =
         * "000.111.222-34"; f1.funcionario.rg = "2.300.212";
         * f1.funcionario.idade = 20; f1.funcionario.contato = "61 9581-6998";
         * f1.funcionario.sexo = 'M'; f1.data.dataFuncionarioEmpresa(04, 05,
         * 1994);
         */
        // Passando os argumentos para os parâmetros esperado pelo método..
        f1.salarioFuncionario(100.0);
        f1.funcionarioRecebeAumento(50.0);

        // exibe informações a seguir..

        f1.exibeInformacoesGerais();

    }

}

ERRO: Pessoal, boa noite. Estou tentando resolver um problema, por favor podem me ajudar?

Segue o código:


public class Funcionario2 {
    PessoaFuncionario funcionario;
    DescricaoEmpresa empresa;
    DataFuncionarioEmpresa data;
    double salario;
    double aumentoSalario;

    // Métodos para o funcionário relacionados a salários... //
    void salarioFuncionario(double salario) {
        this.salario = salario;
    }

    void funcionarioRecebeAumento(double aumentoSalario) {
        this.aumentoSalario += aumentoSalario;
    }

    double calculaSalarioAnual() {
        return this.salario *= 12;
    }

    void exibeInformacoesGerais() {

        for (int i = 0; i < this.empresa.funcionarios.length; i++) {
            Funcionario2 funcionario = this.empresa.funcionarios[i];
            if (funcionario == null)
                continue;        

        System.out.println();
        System.out.println(">>>>>>>>>>>>EMPRESA<<<<<<<<<<");
        System.out.println();
        System.out.println("Empresa: " + this.empresa.nomeEmpresa + "\nCNPJ: "
                + this.empresa.cnpjEmpresa + "\nContato empresa: "
                + this.empresa.contatoEmpresa);

        System.out.println();
        System.out.println(">>>>>>>>>>DADOS DO FUNCIONÁRIO<<<<<<<<<");
        System.out.println();
        System.out.println("Nome Funcionário: " + this.funcionario.nome
                + "\nCPF: " + this.funcionario.cpf + "\nRG:"
                + this.funcionario.rg + "\nContato: "
                + this.funcionario.contato + "\nIdade: "
                + this.funcionario.idade + "\nSexo: " + this.funcionario.sexo
                + "\nData de entrada:" + this.data.dataFormatada());

        System.out.println();
        System.out.println(">>>>>>>>>>>>PAGAMENTO FUNCIONÀRIO<<<<<<<<<<<<");
        System.out.println();
        System.out.println("Salário: " + salario + "\nSalário com Aumento: "
                + this.aumentoSalario + "\nSalário Anual: "
                + calculaSalarioAnual());
        }
    }

}

class PessoaFuncionario {

    String nome;
    String rg;
    String cpf;
    String contato;
    char sexo;
    int idade;

}

class DescricaoEmpresa {
    // Criando o Array porque todo array é um objeto..
    // Criando o array porquê não sabemos a quantidade de funcionarios na empresa.
    Funcionario2[] funcionarios;
    String nomeEmpresa;
    String cnpjEmpresa;
    String contatoEmpresa;



}

class DataFuncionarioEmpresa {
    int dia, mes, ano;

    void dataFuncionarioEmpresa(int diaData, int mesData, int anoData) {

        this.dia = diaData;
        this.mes = mesData;
        this.ano = anoData;
    }

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

}

Classe Main:

public class Funcionario2_Main {

    public static void main(String[] args) {

        Funcionario2 f1 = new Funcionario2();
        DescricaoEmpresa empresa = new DescricaoEmpresa();

        // Criando array..
        empresa.funcionarios = new Funcionario2[2];
        empresa.funcionarios[0] = new Funcionario2();

        f1.empresa = new DescricaoEmpresa();
        f1.empresa.nomeEmpresa = "Elementary 01";
        f1.empresa.cnpjEmpresa = "000.000.000-12";
        f1.empresa.contatoEmpresa = "3347-1334";

        // Criando referência para o objeto PessoaFuncionario.

        empresa.funcionarios[0].funcionario.nome = "Felipe Portela";
        empresa.funcionarios[0].funcionario.cpf = "000.111.222-34";
        empresa.funcionarios[0].funcionario.rg = "1133.213";
        empresa.funcionarios[0].funcionario.contato = "(61) 9383 -6998";
        empresa.funcionarios[0].funcionario.idade = 20;
        empresa.funcionarios[0].funcionario.sexo = 'M';

        /*
         * f1.funcionario = new PessoaFuncionario(); f1.data = new
         * DataFuncionarioEmpresa();
         * 
         * f1.funcionario.nome = "Felipe Portela"; f1.funcionario.cpf =
         * "000.111.222-34"; f1.funcionario.rg = "2.300.212";
         * f1.funcionario.idade = 20; f1.funcionario.contato = "61 9581-6998";
         * f1.funcionario.sexo = 'M'; f1.data.dataFuncionarioEmpresa(04, 05,
         * 1994);
         */
        // Passando os argumentos para os parâmetros esperado pelo método..
        f1.salarioFuncionario(100.0);
        f1.funcionarioRecebeAumento(50.0);

        // exibe informações a seguir..

        f1.exibeInformacoesGerais();

    }

}

**

Erro: Exception in thread "main" java.lang.NullPointerException at PrimeirosPassosJAVA.ExerciciosJAVA.OrientacaoObjetos.Funcionario2_Main.main(Funcionario2_Main.java:21)

** O que posso melhorar? o que estou fazendo de errado? Grato.

5 respostas

Galera, foi repetido o código. Considerem os dois primeiros códigos somente.

solução!

Seu código ficou bem confuso. Creio que voce possa melhorar usando o ArrayList. Mas pelo menos consegui fazer ele rodar alterando apenas duas linhas na classe Funcionario2_Main. Ai voce pode rodar o codigo em Debug para entender como ele funciona

Segue o código:

public class Funcionario2 {
    PessoaFuncionario funcionario;
    DescricaoEmpresa empresa;
    DataFuncionarioEmpresa data;
    double salario;
    double aumentoSalario;
    // Métodos para o funcionário relacionados a salários... //
    void salarioFuncionario(double salario) {
        this.salario = salario;
    }
    void funcionarioRecebeAumento(double aumentoSalario) {
        this.aumentoSalario += aumentoSalario;
    }
    double calculaSalarioAnual() {
        return this.salario *= 12;
    }
    void exibeInformacoesGerais() {
        for (int i = 0; i < this.empresa.funcionarios.length; i++) {
            Funcionario2 funcionario = this.empresa.funcionarios[i];
            if (funcionario == null)
                continue;        
        System.out.println();
        System.out.println(">>>>>>>>>>>>EMPRESA<<<<<<<<<<");
        System.out.println();
        System.out.println("Empresa: " + this.empresa.nomeEmpresa + "\nCNPJ: "
                + this.empresa.cnpjEmpresa + "\nContato empresa: "
                + this.empresa.contatoEmpresa);
        System.out.println();
        System.out.println(">>>>>>>>>>DADOS DO FUNCIONÁRIO<<<<<<<<<");
        System.out.println();
        System.out.println("Nome Funcionário: " + this.funcionario.nome
                + "\nCPF: " + this.funcionario.cpf + "\nRG:"
                + this.funcionario.rg + "\nContato: "
                + this.funcionario.contato + "\nIdade: "
                + this.funcionario.idade + "\nSexo: " + this.funcionario.sexo
                + "\nData de entrada:" + this.data.dataFormatada());
        System.out.println();
        System.out.println(">>>>>>>>>>>>PAGAMENTO FUNCIONÀRIO<<<<<<<<<<<<");
        System.out.println();
        System.out.println("Salário: " + salario + "\nSalário com Aumento: "
                + this.aumentoSalario + "\nSalário Anual: "
                + calculaSalarioAnual());
        }
    }
}
class PessoaFuncionario {
    String nome;
    String rg;
    String cpf;
    String contato;
    char sexo;
    int idade;
}
class DescricaoEmpresa {
    // Criando o Array porque todo array é um objeto..
    // Criando o array porquê não sabemos a quantidade de funcionarios na empresa.
    Funcionario2[] funcionarios;
    String nomeEmpresa;
    String cnpjEmpresa;
    String contatoEmpresa;
}
class DataFuncionarioEmpresa {
    int dia, mes, ano;
    void dataFuncionarioEmpresa(int diaData, int mesData, int anoData) {
        this.dia = diaData;
        this.mes = mesData;
        this.ano = anoData;
    }
    String dataFormatada() {
        return this.dia + "/" + this.mes + "/" + this.ano;
    }
}

Classe Main:

public class Funcionario2_Main {
    public static void main(String[] args) {
        Funcionario2 f1 = new Funcionario2();
        DescricaoEmpresa empresa = new DescricaoEmpresa();
        // Criando array..
        empresa.funcionarios = new Funcionario2[2];
        empresa.funcionarios[0] = new Funcionario2();
        // f1.empresa = new DescricaoEmpresa();
        f1.empresa = empresa; // Adicionado para pegar a mesma instacia da classe DescricaoEmpresa
        f1.empresa.nomeEmpresa = "Elementary 01";
        f1.empresa.cnpjEmpresa = "000.000.000-12";
        f1.empresa.contatoEmpresa = "3347-1334";
        // Criando referência para o objeto PessoaFuncionario.
        empresa.funcionarios[0].funcionario = new PessoaFuncionario(); // Adicionado para instacia o funcionario dentro do array
        empresa.funcionarios[0].funcionario.nome = "Felipe Portela";
        empresa.funcionarios[0].funcionario.cpf = "000.111.222-34";
        empresa.funcionarios[0].funcionario.rg = "1133.213";
        empresa.funcionarios[0].funcionario.contato = "(61) 9383 -6998";
        empresa.funcionarios[0].funcionario.idade = 20;
        empresa.funcionarios[0].funcionario.sexo = 'M';

        f1.funcionario = new PessoaFuncionario(); 
        f1.data = new DataFuncionarioEmpresa();

        f1.funcionario.nome = "Felipe Portela"; 
        f1.funcionario.cpf = "000.111.222-34"; 
        f1.funcionario.rg = "2.300.212";
        f1.funcionario.idade = 20; 
        f1.funcionario.contato = "61 9581-6998";
        f1.funcionario.sexo = 'M'; 
        f1.data.dataFuncionarioEmpresa(04, 05, 1994);

        // Passando os argumentos para os parâmetros esperado pelo método..
        f1.salarioFuncionario(100.0);
        f1.funcionarioRecebeAumento(50.0);
        // exibe informações a seguir..
        f1.exibeInformacoesGerais();
    }
}

Talvez o pessoal possa te dar uma explicação melhor

O Erro que o seu codigo deu foi porque ele nao encontrou a instancia dos objetos que voce estava setando.

Lucas, aonde exatamente eu esqueci de setar as instâncias?

Ali aonde eu coloquei: empresa.funcionarios[0].funcionario = new PessoaFuncionario();

Se colocasse um System.out.println(empresa.funcionarios[0].funcionario); antes iria ver que esta null então como você esta tentando setar o nome do funcionario num objeto null empresa.funcionarios[0].funcionario.nome = "Felipe Portela"; ele da a exception NullPointerException, por isso você colocando o new ele instancia e pode setar os atributos do objeto

E a outra coisa é que você estava criando outro objeto para a Empresa

// f1.empresa = new DescricaoEmpresa();
f1.empresa = empresa; // Adicionado para pegar a mesma instacia da classe DescricaoEmpresa

Ai eu so passei a mesma referencia que você já tinha criado, o ideal seria ter criado só um.