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

Dúvida no Ex. 1 da Aula 7 - Atributos e métodos estáticos

Olá pessoal,

tenho dúvida em relação à atributos static, pois estou usando o atributo na Classe Funcionario e quando faço o for no método mostraFuncionarios() o valor do getIdentificador() permanece o mesmo. Desde já agradeço!

Segue abaixo o código:

class Funcionario{

private String nome; private String rg; private String departamento; private double salario; private Data dataDeEntrada = new Data(); private static int proximoFuncionario = 0; private int identificador;

public Funcionario(){

}

public Funcionario(String nome){ this.nome = nome; this.identificador = proximoFuncionario++; }

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

public String getNome(){ return this.nome; }

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

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

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

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 Data getDataDeEntrada(){ return this.dataDeEntrada; }

public void setDataDeEntrada(Data dataDeEntrada){ this.dataDeEntrada = dataDeEntrada; }

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

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

class Data{

public int dia; public int mes; public int ano;

public Data(){

}

public Data(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) { 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 void preencheData(int dia, int mes, int ano){ this.dia = dia; this.mes = mes; this.ano = ano; }

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

class Empresa{

private String nome; private String cnpj; private Funcionario[] funcionarios; private int livre = 0;

public Empresa(int livre){ this.funcionarios = new Funcionario[livre]; }

public Empresa(){

}

public String getNome(){ return this.nome; }

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

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

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

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

public void adiciona(Funcionario f){ this.funcionarios[this.livre] = f; this.livre++;

}

void mostraFuncionarios(){

for(int i = 0; i < this.livre; i++){

System.out.println("Funcionario: " + this.funcionarios[i].getIdentificador());

System.out.println("Nome: " + this.funcionarios[i].getNome()); System.out.println("RG: " + this.funcionarios[i].getRg()); System.out.println("Salario: " + this.funcionarios[i].getSalario()); System.out.println("Departamento: " + this.funcionarios[i].getDepartamento()); System.out.println("Data de Entrada: " + (this.funcionarios[i].getDataDeEntrada() == null ? "Sem Data" : this.funcionarios[i].getDataDeEntrada().getFormatada())); System.out.println("O calculo do ganho anual eh " + this.funcionarios[i].calculaGanhoAnual() + "\n"); } }

void mostraTodasAsInformacoes(){

for(int j = 0; j < this.livre; j++){ System.out.println("Funcionario na posicao " + j); this.funcionarios[j].mostra(); } }

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

class TestaEmpresa{

public static void main(String[] args){

Empresa empresa = new Empresa(10);

Funcionario f1 = new Funcionario(); f1.setNome("Fulano"); f1.setRg("4798019"); f1.setDepartamento("Administrativo"); f1.setSalario(1000); f1.getDataDeEntrada().preencheData(01, 02, 2016); empresa.adiciona(f1);

Funcionario f2 = new Funcionario(); f2.setNome("Ciclano"); f2.setRg("4325645"); f2.setDepartamento("Contabeis"); f2.getDataDeEntrada().preencheData(02, 01, 2016); f2.setSalario(2000); empresa.adiciona(f2);

empresa.mostraFuncionarios(); } }

2 respostas

O seu método getIdentificador não está somando quando é acessado. Ele deve ser assim:

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

solução!

Consegui resolver alterando o construtor da Classe Funcionario da seguinte forma:

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

Assim o atributo identificador recebe o valor do atributo proximoFuncionario++, incrementando o valor da variável;

Agradeço a ajuda Everton.