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

Arrays - Duvida de como fazer o exercicio 1.

Criei a class Funcionario, Empresa com o atributo Funcionario[] funcionarios, TesteFuncionario Esta mostrando o seguinte erro: C:\CURSOS\ALURA\Java I Primeiros passos\04 - Arrays>javac Funcionario.java

C:\CURSOS\ALURA\Java I Primeiros passos\04 - Arrays>java TesteFuncionario Softwork 12345678901 Exception in thread "main" java.lang.NullPointerException at TesteFuncionario.main(Funcionario.java:51)

O meu maior problema esta em entender o array na da class Funcionario incluido na class Empresa e como tratar na classe TesteFuncionario

class Funcionario { String nome; String depto; double salario; Data datEntradaBanco; String rg;

void mostraFuncionario() { System.out.println("Nome: " + this.nome); System.out.println("Depto: " + this.depto); System.out.println("Salario:" + this.salario); System.out.println("Dia: " + this.datEntradaBanco.dia); System.out.println("Mês: " + this.datEntradaBanco.mes); System.out.println("Ano: " + this.datEntradaBanco.ano); System.out.println("RG: " + this.rg); System.out.println("Ganho Anual: " + this.calculaGanhoAnual()); }

public double calculaGanhoAnual () { double ganhoAnual = 0; return ganhoAnual = this.salario * 12; } }

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

class Empresa { String nomeEmpresa; String cnpj; Funcionario[] funcionarios;

void mostraEmpresa() { System.out.println(this.nomeEmpresa); System.out.println(this.cnpj); } }

class TesteFuncionario { public static void main(String[] args) { Empresa emp = new Empresa(); emp.nomeEmpresa = "Softwork"; emp.cnpj = "12345678901"; emp.mostraEmpresa(); emp.funcionarios = new Funcionario [10];

// emp.funcionarios[0].datEntradaBanco = new Data(); emp.funcionarios[0].datEntradaBanco.dia = 10; emp.funcionarios[0].datEntradaBanco.mes = 8; emp.funcionarios[0].datEntradaBanco.ano = 2011; emp.funcionarios[0].nome = "Ricardo"; emp.funcionarios[0].depto = "Informatica"; emp.funcionarios[0].salario = 10000.0; emp.funcionarios[0].rg = "123456"; emp.funcionarios[0].mostraFuncionario(); } }

4 respostas

Ricardo, existe uma opção de colar código na postagem. Facilita bastante pra gente ler o código e poder ajudar. Colei o seu código em um editor para ver o que está acontecendo. Seguinte, um array guarda uma quantidade fixa de objetos do mesmo tipo. Uma empresa tem funcionários. Por isso ela tem um atributo do tipo Funcionario. Quando o Java lê a linha emp.funcionarios = new Funcionario [10]; ele entende que você quer reservar 10 espaços na memória para guardar objetos do tipo Funcionario. Quando você for inserir um funcionário, você precisa instanciar ele antes de inserir. Antes disso ele não existe. O array é tipo uma caixa de ovos. O espaço está lá, mas alguém tem que colocar os ovos lá antes de poder fazer alguma coisa com eles. Por isso estourou a NullPointerException. Para resolver o seu problema , basta adicionar uma linha instanciando o objeto antes de inserir os dados nele:

emp.funcionarios[0] = new Funcionario();

Espero que eu tenha ajudado. Bons estudos.

class Funcionario { String nome; String depto; double salario; Data datEntradaBanco; String rg; }

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

class Empresa { String nomeEmpresa; String cnpj; Funcionario[] funcionarios;

void mostraEmpresa() { System.out.println(this.nomeEmpresa); System.out.println(this.cnpj); } }

class TesteFuncionario { public static void main(String[] args) { Empresa emp = new Empresa(); emp.nomeEmpresa = "Softwork"; emp.cnpj = "12345678901"; emp.mostraEmpresa();

emp.funcionarios = new Funcionario[10];

emp.funcionarios[0] = new Funcionario();

emp.funcionarios[0] = new Funcionario(); emp.funcionarios[0].datEntradaBanco = new Data(); emp.funcionarios[0].datEntradaBanco.dia = 10; emp.funcionarios[0].datEntradaBanco.mes = 8; emp.funcionarios[0].datEntradaBanco.ano = 2011; emp.funcionarios[0].nome = "Ricardo"; emp.funcionarios[0].depto = "Informatica"; emp.funcionarios[0].salario = 10000.0; emp.funcionarios[0].rg = "123456"; System.out.println("Nome: " + emp.funcionarios[0].nome); System.out.println("Depto: " + emp.funcionarios[0].depto); System.out.println("Salario:" + emp.funcionarios[0].salario); System.out.println("Dia: " + emp.funcionarios[0].datEntradaBanco.dia); System.out.println("Mês: " + emp.funcionarios[0].datEntradaBanco.mes); System.out.println("Ano: " + emp.funcionarios[0].datEntradaBanco.ano); System.out.println("RG: " + emp.funcionarios[0].rg); } }

Inclui o comando que foi informado, na compilação passou ok, mas na execução gerou o erro abaixo:

C:\CURSOS\ALURA\Java I Primeiros passos\04 - Arrays>javac Funcionario.java

C:\CURSOS\ALURA\Java I Primeiros passos\04 - Arrays>javac TesteFuncionario error: Class names, 'TesteFuncionario', are only accepted if annotation processing is explicitly requested 1 error

Executei o código em um compilador online e passou sem problemas. O problema está na linha javac TesteFuncionario. Precisa incluir a extensão do arquivo, como você fez na linha acima.

solução!

Segue o programa correto. O erro ocorreu porque eu estava chamando a class TesteFuncionario com javac

class Funcionario { String nome; String depto; double salario; Data datEntradaBanco; String rg; }

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

class Empresa { String nomeEmpresa; String cnpj; Funcionario[] funcionarios;

void mostraEmpresa() { System.out.println(this.nomeEmpresa); System.out.println(this.cnpj); }

void mostraDadosFunc() { for(int i = 0; i < this.funcionarios.length; i++) { Funcionario func = this.funcionarios[i]; if(func == null) continue; System.out.println("Nome: " + func.nome); System.out.println("Depto: " + func.depto); System.out.println("Salario:" + func.salario); System.out.println("Dia: " + func.datEntradaBanco.dia); System.out.println("Mês: " + func.datEntradaBanco.mes); System.out.println("Ano: " + func.datEntradaBanco.ano); System.out.println("RG: " + func.rg); } }

}

class TesteFuncionario { public static void main(String[] args) { Empresa emp = new Empresa(); emp.nomeEmpresa = "Softwork"; emp.cnpj = "12345678901"; emp.mostraEmpresa();

emp.funcionarios = new Funcionario[10];

emp.funcionarios[0] = new Funcionario(); emp.funcionarios[0] = new Funcionario(); emp.funcionarios[0].datEntradaBanco = new Data(); emp.funcionarios[0].datEntradaBanco.dia = 10; emp.funcionarios[0].datEntradaBanco.mes = 8; emp.funcionarios[0].datEntradaBanco.ano = 2011; emp.funcionarios[0].nome = "Ricardo"; emp.funcionarios[0].depto = "Informatica"; emp.funcionarios[0].salario = 10000.0; emp.funcionarios[0].rg = "123456";

emp.funcionarios[1] = new Funcionario(); emp.funcionarios[1] = new Funcionario(); emp.funcionarios[1].datEntradaBanco = new Data(); emp.funcionarios[1].datEntradaBanco.dia = 10; emp.funcionarios[1].datEntradaBanco.mes = 6; emp.funcionarios[1].datEntradaBanco.ano = 1996; emp.funcionarios[1].nome = "Cida"; emp.funcionarios[1].depto = "Bancaria"; emp.funcionarios[1].salario = 3000.0; emp.funcionarios[1].rg = "9876543";

emp.mostraDadosFunc(); } }