Olá eu estou estudando o capitulo de array na apostila FJ-11, e chegou os exercícios e estou penando, vamos começar as dúvidas:
Criar uma classe empresa com os atributos isso eu já fiz.
Existe uma classe funcionário eu que já criei vou postar o código abaixo:
public class Funcionario {
String nome;
String departamento;
String rg;
String cpf;
String hsaida;
String hentrada;
boolean status = true;
double salarioatual;
Data dataEntrada;
Esses são os atributos da classe funcionário, e agora que chega a parte que não tenho a mínima idéia, eu tenho que criar um método adiciona dentro da classe Empresa que referência a Funcionário e em cada posição guarde um Funcionário.
Eu pensei em criar uma referência a Funcionário que tenha todos os dados do Funcionário dentro da classe Empresa, Funcionario novoFuncionario;
Então esse método:
voidadiciona(Funcionariof){}
Ia ter um array que ia guardar em cada lugar um funcionário…
Não consigo nem pensar em como criar isso, poderia ser um loop e cada posição referência a um Funcionário…
Como vc esta aprendendo vou tentar ajudar usando array ao invés de lista
É como vc está imaginando msm, uma array que referência objetos Funcionario.
FuncionarioarrayFunc=newFuncionario[10];// array instanciada com espaço para 10 funcionários
void adiciona(Funcionario f) {
for(int i = 0; i < arrayFunc.length; i++) {
//vai adicionando nos espaços vazios da array
}
mapleplayer
corrigindo minha declaração de array
Funcionario[]arrayFunc=newFuncionario[10];
Escreve isso na sua classe Empresa e vc terá uma array de funcionários na sua empresa.
javatar
E quando eu tenho esse array de funcionários eu vou poder acessar a class funcionário só o array? exemplo:
arrayFunc[0].saldo=1500.0;
mapleplayer
Com essa array de Funcionario na sua classe Empresa é possível acessar os atributos de um objeto Funcionario como vc escreveu a partir de um objeto Empresa. No caso os atributos não estariam bem encapsulados.
javatar
Eu estou quase conseguindo resolver, mais agora surge outro problema vou postar os dois código abaixo:
classEmpresa{Stringnome;Stringcnpj;Stringendereço;Stringtelefone;Funcionario[]empregados;voidadiciona(Funcionariof){for(inti=0;i<this.empregados.length;i++){this.empregados[i]=f;}}voidmostraEmpregados(){for(inti=0;i><this.empregados.length;i++){System.out.println("Funcionario na posicao: "+i+""+this.empregados[i]);}}}
você vai notar que o tamanho dela é aquele que você reservou para ela no momento da instanciação mesmo não tendo inserido nada nela, com isso pode se concluir que quando você faz um loop na array como você esta fazendo, todas as referências Funcionario da sua array irão receber o objeto Funcionario que você passa como argumento para o método. É preciso que você insira o objeto Funcionario em um espaço vago da array, dentro do loop verifique se o índice da array já se encontra ocupado ou não, você consegue isso dessa forma
Eu fiz o if para comparar se os índices estava vazio mais quando eu mando ele exibir o que tem dentro de cada índice ele não exibe, os dois códigos estão abaixo e a imagem também, eu passo certo para o método mais ele não exibe o salário que estou passando:
classEmpresa{Stringnome;Stringcnpj;Stringendereço;Stringtelefone;Funcionario[]empregados;publicvoidadiciona(Funcionariof){for(inti=0;i<empregados.length;i++){if(empregados[i]==null){this.empregados[i]=f;break;}}}voidmostraEmpregados(){for(inti=0;i<this.empregados.length;i++){System.out.println("Funcionario na posicao: "+i+" "+this.empregados[i]);}}}
Na verdade seu código esta rodando perfeitamente mas você não percebeu ainda o detalhe que te da a impressão que seu método não esta retornando os funcionários que você inseriu.
O suposto problema surge no seu método mostraEmpregados no seguinte trecho
this.empregados[i]
Isso faz com que a JVM chame o método toString() do objeto retornado da respectiva posição da array, no caso uma referência a um objeto Funcionário esta sendo retornada, por isso aquela saída estranha -> “Funcionário@addbf1”, o porque dessa saída estranha já é um tópico um pouco mais avançado.
Faz o seguinte para ter uma saída mais legível do seu método mostraEmpregados, substitui o código acima por