Imprimindo array!

package Parte1;

import javax.swing.JOptionPane;

public class Empresa {

	String nome;
	Funcionario[] empregados;
	String cnpj;

	void adiciona(Funcionario f) {
		for (int i = 0; i < empregados.length; i++) {
			if (empregados[i] == null) {
				empregados[i] = f;
			}
			if (i == empregados.length) {
				JOptionPane.showMessageDialog(null, "Array cheio");
			}
		}
	}

	void mostraEmpregados() {
		for (int i = 0; i < this.empregados.length; i++) {
			System.out.println("Funcionario na posicao " + i + " "
					+ empregados[i].nome + " " + empregados[i].salario);
		}
	}
}
package Parte1;

public class TesteEmpresa {
	
	public static void main(String[] args) {
		
		Empresa empresa = new Empresa();
		empresa.empregados = new Funcionario[10];
		
		Funcionario f1 = new Funcionario();
		f1.nome = "Francisco";
		f1.salario = 1000.00;
		empresa.adiciona(f1);
		
		Funcionario f2 = new Funcionario();
		f2.nome= "Thiago";
		f2.salario = 2000.00;
		empresa.adiciona(f2);
		
		empresa.mostraEmpregados();
	}

}

Fala galera eu gostaria que vocês me ajudassem quanto a essa dúvida estou fazendo esse projeto mas me enrolei na hora de imprimir os funcionarios cadastrados no array, quando execute a classe de teste ele imprime em todas as posições o primeiro funcionario cadastrado gostaria que vocês analisassem os dois métodos tanto o adiciona quanto o mostraEmpregados e para que vocês possam me dizer porque isso está acontecendo.

Desde já agradeço.

É porque nesse código:

    void adiciona(Funcionario f) {  
        for (int i = 0; i < empregados.length; i++) {  
            if (empregados[i] == null) {  
                empregados[i] = f;  
            }  
            if (i == empregados.length) {  
                JOptionPane.showMessageDialog(null, "Array cheio");  
            }  
        }  
    } 

Você recebe um Funcionario e adiciona ele em todas a posições que estavam null,
e quando tu for adicionar outro Funcionario já não existe mais posições null, então não adicionará em nenhuma posição,
e mesmo se você tirar o teste do null o próximo Funcionario que tu adcionar irá sobrepor em todas posições o ultimo.

Seria mais fácil você utilizar um ArrayList é muito mais flexível em adicionar e remover etc…
Seu código ficaria mais ou menos assim:

ArrayList<Funcionario> empregados = new ArrayList<Funcionario>();

    void adiciona(Funcionario f) {  
        empregados.add(f);
    }  

Galera consegui resolver esse pro obrigado pela atenção de todos e até a próxima.

Outro jeito de fazer:

System.out.println("Digite a quantidade de nomes:");
				qtdeNomes = Byte.parseByte(input.nextLine());
				nomes = new String[qtdeNomes];
				for(x = 0; x < nomes.length; x++){
					System.out.println("Digite o nome:");
					nome = new Scanner(System.in).nextLine();
					nomes[x] = nome;
}

Aonde qtdeNomes e nome seriam parametros de algum metodo.

package Parte1;

public class Funcionario {

	// Atributos da classe
	String nome;
	String rg;
	String departamento;
	double salario;
	Data dataEntrada;

	// metodo que da uma porcentagem de aumento no salario do funcionario
	double bonifica(double valor) {
		double porcentagem = (salario * valor) / 100;
		double novoSalario = salario + porcentagem;
		return novoSalario;
	}

	// metodo para calcular o ganho anual do funcionario
	double calculaGanhoAnual() {
		double ganhoAnual = salario * 12;
		return ganhoAnual;
	}

	// metodo que exibi os dados do funcionario
	void mostra() {
		System.out.println("Nome do Funcionario:" + nome);
		System.out.println("Departamento:" + departamento);
		System.out.println("RG" + rg);
		System.out.println("Data de Entrada: " + this.dataEntrada.dia + "/"
				+ this.dataEntrada.mes + "/" + this.dataEntrada.ano);
		System.out.println("Salario do Funcionario: " + salario);
	}

}
package Parte1;

import javax.swing.JOptionPane;

public class Empresa {

	String nome;
	Funcionario[] empregados;
	String cnpj;

	void adiciona(Funcionario f) {
		for (int i = 0; i < empregados.length; i++) {
			if (empregados[i] == null) {
				empregados[i] = f;
				break;
			}
			if (i == empregados.length) {
				JOptionPane.showMessageDialog(null, "Array cheio");
			}
		}
	}
//erro
	void mostraEmpregados() {
		for (int i = 0; i < empregados.length; i++) {
		     System.out.println("Funcionario "+ i + empregados[i].mostra());
		}
	}
}
package Parte1;

public class TesteEmpresa {
	
	public static void main(String[] args) {
		
		Empresa empresa = new Empresa();
		empresa.empregados = new Funcionario[10];
		
		Funcionario f1 = new Funcionario();
		f1.nome = "Francisco";
		f1.salario = 1000.00;
		f1.rg = "321456789";
		empresa.adiciona(f1);
		
		Funcionario f2 = new Funcionario();
		f2.nome= "Thiago";
		f2.salario = 2000.00;
		f2.rg = "456789123";
		empresa.adiciona(f2);
		
		Funcionario f3 = new Funcionario();
		f3.nome = "Joao";
		f3.salario = 3000.00;
		f3.rg = "452896325";
		empresa.adiciona(f3);
		
		empresa.mostraEmpregados();
	}

}

pessoal continuando o exercício da apostila me deparei com esse erro no método mostraEmpregados da classe Empresa e não entendi porque alguém pode me explicar?

o problema do método mostraEmpregados consegui resolver pessoal mas quando invoco o método mostraEmpregados na classe de teste ele só exibi o funcionario na primeira posição do array. Porque?

O erro está na hora de inserir os funcionários como eu já te mostrei no post acima,
se tu usar um ArrayList tu vai economizar todo o tempo que está perdendo nesse erro.
Pesquise sobre como usar um ArrayList.

tendi obrigado cara