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

Dúvida no Ex. 6 da Aula 4 - Arrays

Não consigo Reproduzir a posição dos funcionarios


public class Empresa {

    String nome;
    Funcionario[] empregados;
    double cnpj;
    int livre = 0;
    private String salario;

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

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

    void mostraTodasInformcoes() {
        for (int i = 0; i < this.livre; i++) {
            System.out.println("Funcionarios na Posição " + i);
            this.empregados[i].mostra();
        }
    }

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

}

public class testaEmpresa {

    public static void main(String[] args) {

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

        Funcionario f1 = new Funcionario();
        f1.nome = "Pedro Henrique";
        f1.anosDeTrabalho = 3;
        f1.dpto = "TI";
        f1.salario = 4000;
        empresa.adiciona(f1);

        Funcionario f2 = new Funcionario();
        f2.nome = "Luis ";
        f2.anosDeTrabalho = 3;
        f2.dpto = "Segurança";
        f2.salario = 3000;
        empresa.adiciona(f2);

        empresa.mostraTodasInformcoes();
        System.out.println(empresa.contem(f1));

    }

}
Funcionarios na Posição 0
Exception in thread "main" java.lang.NullPointerException
    at aulaTresOO.Funcionario.mostra(Funcionario.java:30)
    at aulaTresOO.Empresa.mostraTodasInformcoes(Empresa.java:26)
    at aulaTresOO.testaEmpresa.main(testaEmpresa.java:24)
8 respostas

Cara eu só encontrei um erro que não está relacionado ao seu problema. No método mostra empregados. for (int i = 0; i < this.empregados.length; i++) Usar o length nesse caso vai te dar um null pointer exception sempre que você chamar esse método e o array não estiver cheio de funcionários. A solução seria usar o this.livre para só percorrer as posições ocupadas, como você fez nos outros métodos para percorrer o array.

Pode ter alguma coisa que coisa que eu não vi na classe Empresa, obviamente, mas enquanto um par de olhos mais capazes não aparecem você pode postar a classe Funcionario?

Seria mais fácil lhe ajudar se todas as classes estivessem sido postadas. Cadê a classe Funcionario? : 0 bom criei ela com as infos que tinha sobre ela... Rodei aqui o teu código e não tive erros. Funcionou. Vou verificar se acho algum problema de lógica mesmo assim.

Realmente não tem como testar sem todas as classes envolvidas. O erro está na linha 30 da classe Funcionario, a qual você não postou.

solução!

Oi Pedro, tudo bem?

Conseguiu resolver seu problema? Se ainda não teve sucesso poste mais informações pra gente poder te ajudar :)

Abraços!

Ao tentar inserir um funccionario que nao existe, o arquivo nao compila. Como posso fazer para compilar o arquivo mesmo passando um funcionario inexistente?

Oi Diogo,

Mostra seu código pra gente!

Abs.

class Funcionario {

String nome; String departamento; double salario; Data dataEntradaNoBanco; long rg;

void recebeAumento (double valorAumento){ this.salario += valorAumento; }

double calculaGanhoAnual (){

return this.salario * 12; }

void mostra(){ System.out.println ("Nome " + this.nome); System.out.println ("Departamento " + this.departamento); System.out.println ("Salario " + this.salario); System.out.println ("Data " + this.dataEntradaNoBanco.getFormatada()); System.out.println ("RG " + this.rg); System.out.println ("Ganho Anual " + this.calculaGanhoAnual());

}

}

class Empresa {

String nome; long cnpj; Funcionario[] empregados; int telefone; int livre=0;

void adiciona (Funcionario f){

this.empregados[this.livre] = f; this.livre++; }

void mostraEmpregados(){ for (int i=0;i<this.livre; i++){ System.out.println ("Empregado na posicao " + i); System.out.println("R$ " + this.empregados[i].salario); }

}

void mostraTodasInformacoes (){ for (int i=0; i<this.livre; i++){ System.out.println("Empregado na posição " + i); empregados[i].mostra();

}

}

boolean contem (Funcionario f){ for(int i = 0; i<this.livre;i++){ if (f == empregados[i]){ System.out.println(f.nome); } }

return false; } }

class TesteEmpresa {

public static void main (String[] args){

Data data = new Data(); Empresa empresa = new Empresa(); empresa.empregados = new Funcionario[5];

Funcionario f1 = new Funcionario(); f1.nome = "Diogo"; f1.departamento = "Financas"; f1.salario = 5000; f1.dataEntradaNoBanco = new Data(); f1.dataEntradaNoBanco.preencherData(21,02,1977); f1.rg = 202304301; empresa.adiciona(f1);

Funcionario f2 = new Funcionario(); f2.nome = "Rafael"; f2.departamento = "Seguros"; f2.salario = 10000; f2.dataEntradaNoBanco = new Data(); f2.dataEntradaNoBanco.preencherData(11,01,1980); f2.rg =123114239; empresa.adiciona (f2);

//empresa.empregados[0].mostra(); //empresa.empregados[1].mostra();

//empresa.mostraEmpregados();

//empresa.mostraTodasInformacoes(); empresa.contem(f2); } }

class Data {

int dia; int mes; int ano;

void preencherData (int dia, int mes, int ano){

this.dia = dia; this.mes = mes; this.ano = ano; }

String getFormatada () {

return this.dia + "/" + this.mes + "/" + this.ano; } }

Você quer adicionar um funcionário que não foi criado no Array empregados? tipo: empresa.adiciona(f3);

mas sem antes ter feito:

Funcionario f3 = new Funcionario(); Essa é a duvida? Eu acredito que não tem como você fazer qualquer referencia a f3 sem ter iniciado ele. você teria realmente que fazer Funcionario f3 = new Funcionario(); Era isso que estava com duvida? Se eu entendi errado a pergunta volte a postar por aqui.