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

Exercicio 4

Boa noite!! Tenho uma dúvida pessoal, desenvolvi o código, e o mesmo executa e dá o retorno correto dos valores, mas dá erro NullPointerException, alguém pode me ajudar? A seguir o erro e o código. Obrigada!!

Exception in thread "main" java.lang.NullPointerException at Emp.print(Exerc4.java:33) at Exerc4.main(Exerc4.java:111)

class Emp{

public String strNomeEmp; public String strEnderecoEmp;

private static int posicao=0;

private Func[] funcionarios = new Func[10];

public Func getFuncionario(int posicao) { return this.funcionarios[posicao]; }

public void setFuncionario(Func funcs){ this.funcionarios[posicao] = funcs; posicao++; }

public void print(){

System.out.println("Nome da Empresa:" + strNomeEmp); System.out.println("Endereço da Empresa:" + strEnderecoEmp ); System.out.println("Lista de Funcionarios:");

for (posicao=0; posicao<=funcionarios.length; posicao++){ System.out.print(posicao+" - Endereço:"+ this.funcionarios[posicao].strNome); System.out.print(" - Endereço:"+ this.funcionarios[posicao].strEndereco); System.out.print(" - RG:"+ this.funcionarios[posicao].getRG()); System.out.print(" - Salário:"+ this.funcionarios[posicao].getSalario()); System.out.print(" - Aumento Anual:"+ this.funcionarios[posicao].getAumentoAnual()); System.out.println(" - Ganho Anual:"+ this.funcionarios[posicao].getGanhoAnual()); } }

}

class Func{ public String strNome; public String strEndereco; private String strRG; private double dblSalario;

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

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

public String getRG(){ return this.strRG; }

public void setRG(String RG){ this.strRG = RG; }

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

public double getAumentoAnual(){ if (this.dblSalario < 3000.00) { return this.dblSalario 0.06; } else{ return this.dblSalario 0.04; } }

}

public class Exerc4{

public static void main(String[] args){

Emp empresa = new Emp(); empresa.strNomeEmp = "Java"; empresa.strEnderecoEmp = "Rio de Janeiro 1000";

Func dadosFunc1 = new Func(); dadosFunc1.strNome = "Valéria"; dadosFunc1.strEndereco = "Rua Belo Horizonte 110";

dadosFunc1.setRG("MG1234567"); dadosFunc1.setSalario(4000.00);

empresa.setFuncionario(dadosFunc1);

Func dadosFunc2 = new Func(); dadosFunc2.strNome = "Clara"; dadosFunc2.strEndereco = "Rua São Paulo 4300";

dadosFunc2.setRG("M13468467"); dadosFunc2.setSalario(3000.00);

empresa.setFuncionario(dadosFunc2);

empresa.print();

} }

Aguardo, Valéria.

4 respostas
solução!
Boa noite Valéria,

O problema é apenas de lógica. Veja, você criou uma classe que mantém um indicador da última posição ocupada dentro do array de funcionários. 
Até aí perfeito, o problema éque no seu loop de impressão, você usa a mesma variável para percorrer todo o array. Com isso, você tem dois problemas:
1. Você inutiliza o contador de posição, isto é, se o seu programa não terminasse aí, e precisasse adicionar outro funcionário, daria outro erro, algo como OutOfRangeException ou algo parecido;
2. Ao percorrer TODA a extensão do array, você dá de cara com posições sem objetos, ou seja, com NULL, por isso o erro que você recebeu.

Abaixo eu corrigi o seu loop, usando outra variável apenas para contagem e a variável posição para determinar o limite superior:


for (int Cont=0; Cont<posicao; Cont++){
    System.out.print(posicao+" - Endereço:"+ this.funcionarios[Cont].strNome); 
    System.out.print(" - Endereço:"+ this.funcionarios[Cont].strEndereco); 
    System.out.print(" - RG:"+ this.funcionarios[Cont].getRG()); 
    System.out.print(" - Salário:"+ this.funcionarios[Cont].getSalario()); 
    System.out.print(" - Aumento Anual:"+ this.funcionarios[Cont].getAumentoAnual()); 
    System.out.println(" - Ganho Anual:"+ this.funcionarios[Cont].getGanhoAnual()); 
    }
}

Um abraço,
Sandro.

Entendi. Obrigada Sandro.

Oi Valeria

Seu problema foi resolvido? Se sim, por favor marque a resposta do Sandro como solução dessa dúvida.

Eu diria a mesma coisa que o Sandro