Exercicio sobre Array 5.5 apostila caelum [RESOLVIDO]

Duvida sobre o exercicio da apostila caelum , está feito até a parte 5 pedida no exercicio.

[code]package javaapplication8;

class Funcionario {

String nome;
String departamento;
double salario;
String dataEntradaBanco;
String rG;
boolean efetivo;

void bonifica(double aumento) {
    this.salario += aumento;
}

void demite() {
    this.efetivo = false;
}

}

class Empresa {

String cnpj;
Funcionario[] empregados;

void adiciona(Funcionario f) {
    for (int i = 0; i < empregados.length; i++) {
        this.empregados[i] = f;
    }
}

void mostraEmpregados() {
    for (int i = 0; i < this.empregados.length; i++) {
        System.out.println("O empregado na posicação " + i);
        System.out.println("Salario do empregado: " + empregados[i]);

    }
}

}

class TestaEmpresa {

public static void main(String[] args) {
    Empresa empresa = new Empresa();
    empresa.empregados = new Funcionario[10];
    Funcionario f1 = new Funcionario();
    f1.salario = 500.0;
    empresa.adiciona(f1);
    Funcionario f2 = new Funcionario();
    f2.salario = 600.5;
    empresa.adiciona(f2);
    empresa.mostraEmpregados();
}

}
[/code]

O Resultado sai:

run:
O empregado na posicação 0
Salario do empregado: javaapplication8.Funcionario@addbf1
O empregado na posicação 1
Salario do empregado: javaapplication8.Funcionario@addbf1
O empregado na posicação 2
Salario do empregado: javaapplication8.Funcionario@addbf1
O empregado na posicação 3
Salario do empregado: javaapplication8.Funcionario@addbf1
O empregado na posicação 4
Salario do empregado: javaapplication8.Funcionario@addbf1
O empregado na posicação 5
Salario do empregado: javaapplication8.Funcionario@addbf1
O empregado na posicação 6
Salario do empregado: javaapplication8.Funcionario@addbf1
O empregado na posicação 7
Salario do empregado: javaapplication8.Funcionario@addbf1
O empregado na posicação 8
Salario do empregado: javaapplication8.Funcionario@addbf1
O empregado na posicação 9
Salario do empregado: javaapplication8.Funcionario@addbf1
CONSTRUÍDO COM SUCESSO (tempo total: 0 segundos)

Ao menos o primeiro e o segundo eram para aparecer os funcionarios certo?

System.out.println("Salario do empregado: " + empregados[i].salario);

Outra alternativa é implementar o método toString() da classe funcionario:

@Override public String toString() { return nome; }

E cuidado que seu método adiciona está atribuindo o valor adicionado a todas as posições do array de funcionários.

Obrigado pela ajuda pessoal, eu acabei o exercicio até a parte 5, e para posteriores esclarecimentos posto aqui a solução por min encontrada:

[code]package javaapplication8;

class Funcionario {

String nome;
String departamento;
double salario;
String dataEntradaBanco;
String rG;
boolean efetivo;

void bonifica(double aumento) {
    this.salario += aumento;
}

void demite() {
    this.efetivo = false;
}

}

class Empresa {

String cnpj;
Funcionario[] empregados;

void adiciona(Funcionario f) {
    int flag = 0;
    for (int i = 0; flag == 0; i++) {
        if (this.empregados[i] == null) {
            this.empregados[i] = f;
            flag = 1;
        }
    }
}

void mostraEmpregados() {
    for (int i = 0; this.empregados[i] != null; i++) {
        if (this.empregados[i] != null) {
            System.out.println("O empregado na posicação " + i);
            System.out.println("Salario do empregado: " + empregados[i].salario);

        }
    }
}

}

class TestaEmpresa {

public static void main(String[] args) {
    Empresa empresa = new Empresa();
    empresa.empregados = new Funcionario[10];
    Funcionario f1 = new Funcionario();
    f1.salario = 500.0;
    empresa.adiciona(f1);
    Funcionario f2 = new Funcionario();
    f2.salario = 600.5;
    empresa.adiciona(f2);
    empresa.mostraEmpregados();
}

}
[/code]

Pessoal poderiam me explicar o que o código do nosso amigo faz ness trecho?

void adiciona(Funcionario f) { int flag = 0; for (int i = 0; flag == 0; i++) { if (this.empregados[i] == null) { this.empregados[i] = f; flag = 1; } }

Eu não estou entendendo porque eu pensava que o for sempre fazia loop, não estou entendendo o que o flag == 0 está fazendo aí.

Podem me explicar por favor?

O for continua fazendo loop. No caso a condição (que é o que vai no meio) é percorrer enquanto flag for igual a 0.

essa parte eu fiz assim:

[code]void adiciona(Funcionario f) {

	for (int i = 0; i < empregados.length; i++) {

		if(this.empregados[i] == null) {

			} else { this.empregados[i] = f;

				break;

			}

	}

}[/code]

Também está certo?

Ué, pq seu código está no else?

Outra coisa, evite deixar o if vazio e só colocar código no else. Faça um if só simplesmente negando a condição do if.

void adiciona(Funcionario f) { for (int i = 0; i < empregados.length; i++) { if(empregados[i] == null) { empregados[i] = f; return; } } }

O código pode ficar muito mais eficiente se você guardar numa variável quantos elementos você tem na lista.

void adiciona(Funcionario f) { if (count < lista.length) { empregados[cont] = f; cont++; } }

Muito obrigado pelos macetes. Eu ainda sou muito novato no java ^^.

Olha o que ele está pedindo:

“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?”

Pelo que eu entendi eu devo sempre inserir o valor numa posição que esteja null. Mas da forma que você fez, quando eu for adicionar um funcionario ele não vai sobrepor os valores? Porque sempre que eu chamar metodo “adiciona” ele vai contar o loop do começo(ou não?) e no cont=0 ja tem valores. Eu devo colocar um if da mesma forma que o nosso amigo do post acima colocou, ou simplesmente com o seu código eu consigo fazer o que pede no exercício?

Desculpa a minha ignorância, mas é que eu estou aprendendo programação agora e só pela net mesmo por enquanto.

Eu resolvi o exercicio 2 assim:

[code]int numFuncionario = 0;
Funcionario[] empregados = new Funcionario[5];

void Adiciona(Funcionario f){	
	if (this.numFuncionario < this.empregados.length){
		for (int i = 0; i < this.empregados.length; i++) {
			if (this.empregados[this.numFuncionario] == null){
				this.empregados[this.numFuncionario] = f;
				this.numFuncionario += 1;
				System.out.println("Func. Cadastrado!");
				break;
			} 
		}
	} else {
		System.out.println("Não há vagas");
	}
}[/code]