– Crie um objeto da classe Empresa. Em seguida, crie vários objetos da classe Funcionario e inclua-os na Empresa. Demita alguns e depois imprima a quantidade de funcionários da empresa utilizando o método “numeroDeFuncionarios”.
Há como adicionar objetos de uma classe em um array de objetos de outra classe?
Sim, há:
classe BBB{
// atributos
}
classe AAA{
List listaDeElementos; // use List se não for obrigatório Array
public void adicionarElemento(BBB instanciaDeBBB){
listaDeElementos.add(instanciaDeBBB)
}
}
main(){
AAA instanciaAAA = new AAA();
BBB B1 = new BBB();
instanciaAAA.adicionarElemento(B1);
BBB B2 = new BBB();
instanciaAAA.adicionarElemento(B2);
// etc
}
– Crie um objeto da classe Empresa . Em seguida, crie vários objetos da classe Funcionario e inclua-os na Empresa. Demita alguns e depois imprima a quantidade de funcionários da empresa utilizando o método “numeroDeFuncionarios”.
Não poste só o enunciado, mostre o que tentou fazer e onde estão suas dificuldades em específico.
Abraço.
Empresa e1 = new Empresa("Sim", "4486963525-256", 0);
Funcionario f1 = new Funcionario();
Funcionario f2 = new Funcionario();
Funcionario f3 = new Funcionario("Lucas", "Setor Operacional", 1445.54, "21423-5");
Funcionario f4 = new Funcionario("Anna", "Setor Operacional", 1290.34, "35658-7");
e1.qtdeFuncionarios[0] = f1;
eu tinha feito assim e não deu certo.
agora eu fiz do jeito que vc mostrou e tmb não funciona. dá esse erro:
Exception in thread "main" java.lang.Error: Unresolved compilation problem: The method addElemento(Funcionario) is undefined for the type Empresa
Se você é obrigado a usar arrays (em vez de List), precisa dizer isso claramente. Sempre dê o máximo de detalhes que puder.
Não deu certo é muito vago. Dá erro ou simplesmente “não funciona”?
Você só está passando uma instância de funcionário para a posição zero de um vetor qtdeFuncionarios. E o resto das instâncias de Funcionario? Mostre o código da sua classe Empresa.
Eu dei um código de exemplo, que você precisa adaptar para seu uso. Ele não funciona do jeito que está.
Abraço.
O exercício não pede o uso de List.
A classe empresa:
public class Empresa {
String nome;
String cnpj;
int qtde_de_funcionarios;
private Funcionario qtdeFuncionarios[];
Empresa(String n, String cnpj, int qtdeFunc) {
this.qtde_de_funcionarios = 0;
}
Empresa() {
this.qtdeFuncionarios = new Funcionario[100];
}
public void addFuncionario(Funcionario f) {
this.qtdeFuncionarios[0] = f;
}
int numeroDeFuncionarios() {
int c = 0;
for (int i = 0; i < qtdeFuncionarios.length; i++) {
if (qtdeFuncionarios[i] != null) {
c++;
}
}
this.qtde_de_funcionarios = c;
return this.qtde_de_funcionarios;
}
}
no método principal eu chamo o método da classe Empresa:
public static void main(String[] args) {
Empresa e1 = new Empresa("Sim", "4486963525-256", 0);
Funcionario f1 = new Funcionario();
Funcionario f2 = new Funcionario();
Funcionario f3 = new Funcionario("Lucas", "Setor Operacional", 1445.54, "21423-5");
Funcionario f4 = new Funcionario("Anna", "Setor Operacional", 1290.34, "35658-7");
e1.addFuncionario(f3);
e depois vem o erro:
Exception in thread "main" java.lang.NullPointerException: Cannot store to object array because "this.qtdeFuncionarios" is null
at exerctrintacincotrintaseis.Empresa.addFuncionario(Empresa.java:25)
O erro diz que qtdeFuncionarios é nulo. No main, você está chamando o construtor da classe Empresa que não está inicializando o vetor (sua classe Empresa tem 2 construtores). Adicione a inicialização do vetor no construtor ou chame o construtor sem parâmetros a partir do construtor com parâmetros. Ou seja, faça:
private Funcionario qtdeFuncionarios[];
Empresa(String n, String cnpj, int qtdeFunc) {
this.qtdeFuncionarios = new Funcionario[100]; // adicione essa linha
this.qtde_de_funcionarios = 0;
}
Empresa() {
this.qtdeFuncionarios = new Funcionario[100];
}
Ou faça:
private Funcionario qtdeFuncionarios[];
Empresa(String n, String cnpj, int qtdeFunc) {
this(); // adicione essa linha, que vai chamar o construtor abaixo
this.qtde_de_funcionarios = 0;
}
Empresa() {
this.qtdeFuncionarios = new Funcionario[100];
}
Outra coisa, em addFuncionario(), você está sempre armazenando na posição 0 do vetor qtdeFuncionarios. Acredito que a ideia é mudar uma posição diferente, usando uma variável (possivelmente qtde_de_funcionarios ) para controlar a posição em que o Funcionario é inserido.
Abraço.
Agora funcionou, obrigado!!
Agora em relação ao método addFuncionario(), vc acha essa maneira mais correta pra ir adicionando em cada index do vetor?
public void addFuncionario(Funcionario f) {
if (this.qtde_de_funcionarios == 0) {
qtdeFuncionarios[0] = f;
this.qtde_de_funcionarios++;
} else {
qtdeFuncionarios[this.qtde_de_funcionarios] = f;
this.qtde_de_funcionarios++;
}
}
qtde_de_funcionarios já inicia com zero no construtor. Você não precisa do if só pra preencher a posição zero, apenas de um para verificar se qtde_de_funcionarios é menor que o tamanho do vetor.
public void addFuncionario(Funcionario f) {
if (this.qtde_de_funcionarios < qtdeFuncionarios.length) {
qtdeFuncionarios[this.qtde_de_funcionarios] = f;
this.qtde_de_funcionarios++;
}
}
Um extra: somente se achar necessário, coloque um else nesse if pra avisar o usuário que não tem mais espaço na lista de Funcionarios.
Abraço.
Ok, obrigado, obrigado pelas dicas!
Abraços.