Adicionar funcionario em um Array da classe Empresa

Boa noite, por gentileza alguem pode me ajudar, faz o maior tempo que não consigo resolver esse exercicio:

Tentei um monte de coisa, ArrayList TreeSet, mas nao estou entendendo, conseguindo fazer. Se precisar de todo o codigo eu posto ok?
Muito obtigado

Inserir um funcionario em uma posicao de um Array do metodo adicionaFuncionariosNaEmpresa(Funcionario funcionario).

e nem sb.append("Funcionarios : " + this.funcionarios imprimi o funcionario.

[code]//nao consegui fazer esse metodo funcionar.
public void adicionaFuncionariosNaEmpresa(Funcionario funcionario)
{
this.funcionarios[0] = funcionario;
for(int i = 0; i < this.funcionarios.length; i++)
{
this.funcionarios = i;
}

}
// nem esse.
public void imprimiEmpresaComFuncionarios()
{
	StringBuffer sb = new StringBuffer();
	sb.append("Empresa      : " + this.nome + "\n");
	sb.append("CNPJ         : " + this.cnpj + "\n");
	sb.append("Funcionarios : " + this.funcionarios + "\n");
	
	System.out.println(sb.toString());
}

[/code]

Fiquei meio em dúvida sobre a questão de adicionar um funcionário no array, se é para adicionar no final ou em uma determinada posição, pela assinatura do método, deixa a entender que é no final. Então o método ficaria assim:

public class Teste {
	
	private Funcionario[] f;
	private int size = 0;
	
	public Teste() {
		this(10);
	}
	
	public Teste(int size) {
		f = new Funcionario[size];
	}	
	
	public void adicionaFuncionariosNaEmpresa(Funcionario funcionario) {
		if ( size  &gt= f.length) {
			throw new IndexOutOfBoundsException("Índice: " + f.length + 1 + "Size: " + f.length);
		}
		f[ size++ ] = funcionario;  
			
	}
	
	public void imprimiEmpresaComFuncionarios()	{
 		for (int i = 0; i &lt size; i++) {
 			System.out.println( f[i] );
 		}
 	}		

	public static void main(String[] args) {
		Teste t = new Teste();
		
		Funcionario f1 = new Funcionario();
		f1.setNome("Teste 1");
		t.adicionaFuncionariosNaEmpresa(f1);
		Funcionario f2 = new Funcionario();
		f2.setNome("Teste 2");
		t.adicionaFuncionariosNaEmpresa(f2);
		Funcionario f3 = new Funcionario();
		f3.setNome("Teste 3");
		t.adicionaFuncionariosNaEmpresa(f3);
		Funcionario f4 = new Funcionario();
		f4.setNome("Teste 4");
		t.adicionaFuncionariosNaEmpresa(f4);
		Funcionario f5 = new Funcionario();
		f5.setNome("Teste 5");
		t.adicionaFuncionariosNaEmpresa(f5);
		Funcionario f6 = new Funcionario();
		f6.setNome("Teste 6");
		t.adicionaFuncionariosNaEmpresa(f6);
		
		t.imprimiEmpresaComFuncionarios();
	}
	


} 

E a classe funcionario

public class Funcionario {
	private String nome;

	public String getNome() {
		return nome;
	}

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

	@Override
	public String toString() {		
		return "Nome: " + nome;
	}
}

pra que usar Array ?

Use uma lista…
ex:

List listaDeFuncionarios = new ArrayList();

Funcionario f1 = new Funcionario(“Teste 1”);

listaDeFuncionarios.add(f1);

Pois é como se trata de um exercício eu não usei List :smiley:

Boa noite e muito obrigado pela ajuda, vou tentar ser mais claeo, o problema é que nem eu sei ao certo, acho que não entedi o exercicio.

A empresa deve ter um metodo adiciona que recebe uma referencia a Funcionario como argumento, e guarda o funcionario.
Incluir o funcionario em uma posicao que estiver livre, guardar um contador ou procurar uma osicao vazia toda vez, nao sei,mais achei que seria mais facil com o contador

segue minha calsse Funcionario

import java.util.ArrayList;


public class Empresa 
{
	private String nome;
	private String cnpj;
	private Funcionario[] funcionarios;
	
	public Empresa(String nome, String cnpj, Funcionario[] funcionarios)
	{
		this.nome = nome;
		this.cnpj = cnpj;
		this.funcionarios = funcionarios;
	}
	
	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;
	}
	[color=red][b]//nao consegui fazer esse metodo funcionar[/b].[/color]
	public ArrayList<Funcionario> adicionaFuncionariosNaEmpresa(Funcionario funcionarios)
	{
		ArrayList<Funcionario> a = new ArrayList<Funcionario>();
		a.add(funcionarios);
		return a;
	}
	[color=orange][b]// nem esse.[/b][/color]
	public void imprimiEmpresaComFuncionarios()
	{
		StringBuffer sb = new StringBuffer();
		sb.append("Empresa      : " + this.nome + "\n");
		sb.append("CNPJ         : " + this.cnpj + "\n");
		sb.append("Funcionarios : " + this.funcionarios + "\n[b]");// aqui ele imprime algo como [Funcionario 67816[/b]		
		System.out.println(sb.toString());
	}
}

Primeiro o teu método adicionaFuncionario tinha um ArrayList mas toda vez que ele era chamado ele criava um novo List e quando o método terminava de ser executado a referencia para ele era perdida, para isto crie um List como atributo da sua classe e no construtor istancie esse List, assim você não perde a referência. Segundo, ou você usa Array de Funcionários ou você usa List de Funcionarios, não há necessidade de ter os dois. E por último, o teu método imprime não estava funcionando porque você não estava interando sobre nada (nem armazenando os dados dos Funcionarios), logo ele iria imprimir o que?! Bom, qualquer dúvida fala aí.

 import java.util.ArrayList;
 import java.util.List;
 
 
 public class Empresa 
 {
 	private String nome;
 	private String cnpj;
 	private List<Funcionario> a;
 	
 	public Empresa(String nome, String cnpj)
 	{
 		this.nome = nome;
 		this.cnpj = cnpj;
 		 a = new ArrayList<Funcionario>()
 	}
 	
 	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 void adicionaFuncionariosNaEmpresa(Funcionario funcionarios)
 	{ 		
 		a.add(funcionarios); 		
 	}
 	
 	public void imprimiEmpresaComFuncionarios()
 	{
 		for(int i = 0; i < a.size(); i++){
 			//sobreescreva na tua classe funcionario o 
 			//método toString
 			System.out.println( a.get( i ) );
 		}
 	}
 }

E na sua classe funcionário sobreecreva o método toString, ficaria mais ou menos assim:

@Override public String toString() { //concatene os atributos que voce quer return "Nome: " + nome; }

é como o parceiro falou la em cima ArrayList seria mais eficiente que um array… mais ja que o uso é para array, seu metodo ele tá adicionado ao final… a nao ser que vc crie uma variavel que vai receber a posicao do seu array e coloque esse funcionario na posicao que informar. lembre-se que seu array tem q ter o tamanho e a posicao que informar deve estar dentro dessa extremidade. + - como vc deve fazer.

int pos;
pos = 5;
array[5] = nome;

pegue a logica que vc mata a questao… só isso… depois implemente com arraylist e veja como sua sintaxe vai cair e seu codigo vai estar bem mais facil para manutenção e reutilização

espero ter ajudado!!

thiago, camilo, boa tarde…

Me desculpem pela minha insistência, não sou programador Java, trabalho como analista de custos, mas sou apaixonado por Java, é meu robe, adoro, talvez por não ter estudado uma faculdade de analista de sistemas ou coisa do genero (fiz gestão tecnológica em negócios empresariais) e estudo sozinho por livros, apostilas, e é claro, sem demagogia, o que tenho mais avançado é participando do forúm com vocês, minha dificuldade é enorme, gostaria de pedir por gentileza que me explicassem o que eu fiz, fiquei a tarde toda pra conseguir fazer e não entendi direito o que e fiz, porque, o que significa, tenho problema com lógica, seria possível alguem me ajudar e fazer entender essa lógica?

Estou enviando as classes que modifiquei conforme vocês me ensinaram, mas, não estou entendendo direito o que aconteceu, ME DESCULPEM E MUITO OBRIGADO…

Estou quase desistindo do Java porque o que eu mais queria que é trabalhar nisso, esta cada vez mais distante, fiz inscrições pra vários curso, fui eliminado porque não facul desse genero, está muito difícil, parece que eu fico “martelando numa coisa que nunca vai dar certo, pura ilusão”, o que eu faço, alguém pode me ensinar, dar aulas? desculpem-me pelo desabafo!!!

import java.util.ArrayList;
import java.util.List;


public class Empresa 
{
	private String nome;
	private String cnpj;
	private List<Funcionario> funcionarios;
	
	public Empresa(String nome, String cnpj)
	{
		this.nome = nome;
		this.cnpj = cnpj;
		funcionarios = new ArrayList<Funcionario>();
	}
	
	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 void adicionaFuncionariosNaEmpresa(Funcionario funcionarios)
	{
		this.funcionarios.add(funcionarios);
	}
	
	public void imprimiEmpresaComFuncionarios()
	{
		StringBuilder sb = new StringBuilder();
		sb.append("Empresa      : " + this.nome + "\n");
		sb.append("CNPJ         : " + this.cnpj + "\n");
		sb.append("Funcionarios       : " + this.funcionarios + "\n");
		
		System.out.println(sb.toString());
	}
}

public class Funcionario
{
	private static int Identificador;
	
	private String nome;
	private String departamento;
	private double salario;
	private Data dataAdmissao;
	private String rg;
	private boolean estaNaEmpresa;
	
	public Funcionario(String nome, String departamento, double salario, Data dataAdmissao, String rg, boolean estaNaEmpresa)
	{
		this.setNome(nome);
		this.setDepartamento(departamento);
		this.setSalario(salario);
		this.setDataAdmissao(dataAdmissao);
		this.setRg(rg);
		this.estaNaEmpresa = estaNaEmpresa;	
		Funcionario.Identificador ++;
	}
	
	public static int getIdentificador()
	{
		return Funcionario.Identificador;
	}
	
	public String getNome()
	{
		return this.nome;
	}
	
	public void setNome(String nome)
	{
		this.nome = nome;
	}
	
	public String getDepartamento()
	{
		return this.departamento;
	}
	
	public void setDepartamento(String departamento)
	{
		this.departamento = departamento;
	}
	
	public double getSalario()
	{
		return this.salario;
	}
	
	private void setSalario(double salario)
	{
		this.salario = salario;
	}
	
	public Data getDataAdmissao()
	{
		return this.dataAdmissao;
	}
	
	public void setDataAdmissao(Data dataAdmissao)
	{
		this.dataAdmissao = dataAdmissao;
	}
	
	public String getRG()
	{
		return this.rg;
	}
	
	public void setRg(String rg)
	{
		this.rg = rg;
	}
	
	public boolean getEstaNaEmpresa()
	{
		if(this.estaNaEmpresa == true)
		{
			return true;
		}
		else
		{
			return false;
		}
	}
	
	public double aumentarSalario(double percentual)
	{
		return this.salario *= 1 + percentual / 100;
	}
	
	public double descontarDiasDoSalario(double dias)
	{		
		double salarioDia = this.salario / 30;
		salarioDia *= (30 - dias);
		this.salario = salarioDia;
		return this.salario;
	}
	
	public double bonificarDiasDoSalario(double dias)
	{
		double salarioDia = this.salario / 30;
		salarioDia *= (30 + dias); 
		this.salario = salarioDia; 
		return this.salario;
	}
	
	public void demite()
	{
		if(this.estaNaEmpresa == true || this.estaNaEmpresa == false)
		{
			this.estaNaEmpresa = false;
			System.err.println(this.getNome() + " Funcionario demitido!!!");
		}
	}
	
	public String imprimeFuncionarioNaTela()
	{
		StringBuilder sb = new StringBuilder();
		sb.append("Nome do funcionario: " + this.getNome() + "\n");
		sb.append("Departamento       : " + this.getDepartamento() + "\n");
		sb.append("Salario            : " + this.getSalario() + "\n");
		sb.append("Data de admissao   : " + this.getDataAdmissao().getDia()+ "/" + this.getDataAdmissao().getMes() + "/" + this.getDataAdmissao().getAno() + "\n");
		sb.append("Rg                 : " + this.getRG() + "\n");
		sb.append("Esta na empresa    : " + this.getEstaNaEmpresa() + "\n");
		
		return sb.toString();
	}
	
	public double setBonificaSalario(double percentual)
	{
		return this.salario *= 1 + percentual / 100;
	}
	
	public double getBonificacaoDoSalario()
	{
		double percentual = 0;
		return setBonificaSalario(percentual);
	}
	
	public String toString()
	{
		StringBuilder sb = new StringBuilder();
		sb.append("  " + "\n");
		sb.append("Nome do funcionario: " + this.getNome() + "\n");
		sb.append("Departamento       : " + this.getDepartamento() + "\n");
		sb.append("Salario            : " + this.getSalario() + "\n");
		sb.append("Data de admissao   : " + this.getDataAdmissao().getDia()+ "/" + this.getDataAdmissao().getMes() + "/" + this.getDataAdmissao().getAno() + "\n");
		sb.append("Rg                 : " + this.getRG() + "\n");
		sb.append("Esta na empresa    : " + this.getEstaNaEmpresa() + "\n");
		
		return sb.toString();
	}
	
}
public class Programa 
{
	public static void main(String[] args) 
	{
		Funcionario func = new Funcionario("Rodrigo", "Cadastro", 1000.0, new Data(07,04,1976), "RG 710", true);
		Funcionario func1 = new Funcionario("Rodrigo11", "Cadastro", 1000.0, new Data(02,02,1997), "RG 710", true);
		Funcionario func2 = new Funcionario("Rodrigo22", "Cadastro", 1000.0, new Data(02,02,1997), "RG 710", true);
		Funcionario func3 = new Funcionario("Rodrigo33", "Cadastro", 1000.0, new Data(02,02,1997), "RG 710", true);
		func1.demite();
		
		Empresa e = new Empresa("Neiva Company", "cnpj");
				
		e.adicionaFuncionariosNaEmpresa(func);
		e.adicionaFuncionariosNaEmpresa(func1);
		e.adicionaFuncionariosNaEmpresa(func2);
		e.adicionaFuncionariosNaEmpresa(func3);
		
		e.imprimiEmpresaComFuncionarios();
	}

}

Console

Não consegui entender também por que os métodos da class Funcionario:
public String imprimeFuncionarioNaTela() e public String toString(), retornam String e dão certo e o metodo da class Empresa, public void imprimiEmpresaComFuncionarios(), não funciona se eu colocar pra retornar String.

bom public void imprimiEmpresaComFuncionarios() esse metodo ele nao pode retornar uma string pq ele ja retorna a nada - void = retornar a nada, qdo vc poe void ele nao retorna a nada repita isso varias vezes… entao nesse metodo ai vc seta, ou seja vc pode configurar, manipular algum atributo ou chamar outro metodo.

os outros dois metodos que vc citou ele retorna o tipo q vc definiu string por isso entao qdo vc quiser retornar alguma coisa… atraves de algum metodo vc poe o tipo e o metodo… exemplo:

public int meuMetodo(){return a;}

mais quando eu quero configurar algum atributo por exemplo posso:

public void setIdade(int id){
idade = id;
}

to dizendo que minha idade vai ter uma nova idade a passada no paramentro no metdo setIdade.

Eu tb fiquei maior confuso com os metodos quando tava aprendendo… mais depois fiquei fazendo varios exercicios… com eles ate os mais simples somar, multiplicar… tente aprender primeiros os metodos… como usa-lo… ate com programas bastante simples para depois vc pode usar com compras que exige mais praticidade com eles. Já que vc ta falando que está com dificuldade… e rpz VC É BRASILEIRO nao desista nao… poe isso na sua CABEÇA, vc ai aprender sim… se dedique e paciencia… e dar um passo de cada vez… so nao vai aprender da noite para o dia mais se estudar vc se dedicar para estudar cada assunto por 1 semana vc aprende. eu sofrir muito para aprender a sintaxe… quase desisto… e ainda sofro apredendo pq ainda nem tenho muito conhecimento… e sofro o pao que o lucifer amassou no inferno hehe!
Qualquer coisa forum para dentro sem ter vergonha!! ng nasce sabendo!!

abração…