Há como adicionar objetos de uma classe em um array de objetos de outra classe?

– 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.

1 curtida
    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.

1 curtida

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.

1 curtida

Ok, obrigado, obrigado pelas dicas!
Abraços.