Gente, estou quebrando a cabeça nesse exercicio, help plz
Volte ao nosso sistema de Funcionario e crie uma classe Empresa dentro do mesmo arquivo .java. A
Empresa tem um nome, cnpj e uma referência a uma array de Funcionario, além de outros atributos que
você julgar necessário.
class Empresa {
// outros atributos
Funcionario[] empregados;
String cnpj;
}
A Empresa deve ter um método adiciona, que recebe uma referência a Funcionario como argumento, e
guarda esse funcionário. Algo como:
void adiciona(Funcionario f) {
// algo tipo:
// this.empregados[ ??? ] = f;
// mas que posição colocar?
}
Você deve inserir o Funcionario em uma posição da array que esteja livre. Existem várias maneiras para
você fazer isso: guardar um contador para indicar qual a próxima posição vazia ou procurar por uma posição
vazia toda vez. O que seria mais interessante?
É importante reparar que o método adiciona não recebe nome, rg, salário, etc. Essa seria uma maneira nem
um pouco estruturada, muito menos orientada a objetos de se trabalhar. Você antes cria um Funcionario e
já passa a referência dele, que dentro do objeto possui rg, salário, etc.
Postarei meu codigo abaixo(uma idéia, pq ele ta errado)
Seu método adiciona está pedindo como parâmetro um objeto do tipo funcionário e ao chama-lo no main você está passando parâmetros diferentes (2 String e 1 Inteiro).
Imagino que seu método adiciona esteja correto, nele você está guardando sempre a ultima posição livre na variavel i.
Para funcionar você deve primeiro instanciar seu array de Funcionario (Se quiser pode fazer isso no construtor) e passar o parâmetro correto no método main.
Cole novamente o codigo completo para eu verificar como ficou apos suas alterações.
Você realizou as alterações dos parâmetros passados pro método adiciona dentro do Main que eu tinha comentado ?
Bom, coloque o código novamente aqui que ficará mais facil identificar os problemas.
[code]public class Programa {
public static void main (String[] args){
Empresa e = new Empresa();
Funcionario[] f = new Funcionario[10];
e.empregado = f;
class Empresa {
String nome;
int cnpj;
int i = 1;
Funcionario[] empregado;
void adiciona(Funcionario f){
empregado = new Funcionario[i];
// Alterando a posição do array de 1 para 0.
this.empregado[i-1] = f;
System.out.println(“Empregado " + empregado[i-1].nome+” add com sucesso!");
this.i++;
}
}
public class TestePrograma {
public static void main (String[] args){
Empresa e = new Empresa();
Funcionario[] f = new Funcionario[3];
f[0] = new Funcionario(“Leandro”,“TI”,2000);
f[1] = new Funcionario(“Le”,“TI”,500);
f[2] = new Funcionario(“Leon”,“ADM”,20);
for (Funcionario funcionario : f) {
e.adiciona(funcionario);
}
}
}[/code]
Acho que é isso (meio bizarro), essa maneira funciona para executar o método adiciona mas se você quiser recuperar algum funcionario depois creio que não conseguirá o melhor seria definir um tamanho default para o seu array de Funcionarios aí dessa forma você consegue recuperar mas creio que usar List fica muito mais elegante.
Se quiser de uma olhada docs.oracle.com/javase/6/docs/api/java/util/List.html
Dessa forma abaixo você conseguira recuperar o funcionario sem problemas.
class Funcionario {
String nome;
String dep;
double salario;
Empresa empregado;
public Funcionario(String name, String dept, double sal) {
this.nome = name;
this.dep = dept;
this.salario = sal;
}
}
class Empresa {
String nome;
int cnpj;
int i = 0;
Funcionario[] empregado = new Funcionario[100];
void adiciona(Funcionario f) {
this.empregado[i] = f;
this.i++;
}
void recupera(){
System.out.println("Funcionarios cadastrados\n");
for (Funcionario fun : empregado) {
if(fun != null)
System.out.println(fun.nome);
}
}
}
public class TestePrograma {
public static void main (String[] args){
Empresa e = new Empresa();
Funcionario[] f = new Funcionario[100];
f[0] = new Funcionario("Leandro","TI",2000);
f[1] = new Funcionario("AAAA","DEV",500);
f[2] = new Funcionario("BBBB","ADM",20);
f[3] = new Funcionario("CCCC","NEC",210);
for (Funcionario funcionario : f) {
e.adiciona(funcionario);
}
e.recupera();
}
}
public class Programa {
public static void main (String[] args){
Empresa e = new Empresa();
Funcionario[] f = new Funcionario[10];
f[0] = new Funcionario(“Leandro”, “TI”, 4000);
f[1] = new Funcionario(“Leandro2”, “DBA”, 5000);
f[2] = new Funcionario(“Leandro3”, “Suporte”, 1000);
for (Funcionario funcionario : f) {
e.adiciona(funcionario);
}
}
public class Programa {
public static void main (String[] args){
Empresa e = new Empresa();
Funcionario[] f = new Funcionario[10];
f[0] = new Funcionario(“Leandro”, “TI”, 4000);
f[1] = new Funcionario(“Leandro2”, “DBA”, 5000);
f[2] = new Funcionario(“Leandro3”, “Suporte”, 1000);
for (Funcionario funcionario : f) {
e.adiciona(funcionario);
}
}
}[/code]
[/quote]
Eu não to entendendo muito bem não… se já tá colocando os atributos na array pq ta dando esse for se já está adicionado?!
public class Programa {
public static void main (String[] args){
Empresa e = new Empresa();
Funcionario[] f = new Funcionario[10];
f[0] = new Funcionario(“Leandro”, “TI”, 4000);
f[1] = new Funcionario(“Leandro2”, “DBA”, 5000);
f[2] = new Funcionario(“Leandro3”, “Suporte”, 1000);
for (Funcionario funcionario : f) {
e.adiciona(funcionario);
}
}
}[/code]
[/quote]
Você não está inicializando ele.
Dica: Você deve inicializar todos os arrays para que as posições possam ser utilizadas.
Presta a atenção no seu codigo e se preferir, compara com o que eu passei e verá que está faltando algo !
humm… entendi… agora tipo, como tem no enunciado da questão
2) A Empresa deve ter um método adiciona, que recebe uma referência a Funcionario como argumento, e
guarda esse funcionário. Algo como:
…
void adiciona(Funcionario f) {
// algo tipo:
// this.empregados[ ??? ] = f;
// mas que posição colocar?
}
…