Array - verificar se esta cheio [RESOLVIDO]

Tentei encontrar no fórum, mas não consegui sanar minhas dúvidas.
Estou estudando java ha alguns meses, mas só agora estou conseguindo me aprofundar.

Tenho um método que adiciona funcionários em uma empresa.
Os funcionários são inseridos em uma array pré-definida no construtor.
Preciso que na hora de adicionar o funcionário, que seja verificado se existe uma posição vazia e adicione ele.
E caso o array ja esteja cheio quero duas alternativas pro código:

1ª Enviar uma mensagem avisando que não pode mais inserir o funcionario
2ª criar uma nova array maior e copiar todos os funcionarios que ja estavam mais o novo funcionario.

Eu consegui inserir nas posições vazias, mas não verificar se ja esta cheio:

[code]public class Empresa {
String nome;
String cnpj;
Funcionario[] empregados;
int contador;

Empresa() {
	this.empregados = new Funcionario[10];
}

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


void mostra() {
	for (Funcionario x : this.empregados) {
		String y = x.nome;
		System.out.println(y);

	}
}

}
[/code]

Vlw.

No caso como o array foi definido com tamanho 10. é fácil.

void adiciona(Funcionario f) {   
         if(empregados.length <= 10)
          {
          for (int i = 0; i < this.empregados.length; i++) {   
            if (this.empregados[i] == null) {   
                this.empregados[i] = f;   
                break;   
            } else {   
                continue;   
            }  
          } else{
             // Imprima a mensagem desejada
          } 
        }   
    }   

Algo como:

if (null == seuArray[9]) { // adiciono } else { está cheio. }

Lembrando que se tu definiu o array com tamanho 10, ele começa em 0.
É uma alternativa.

Mas se usar Collection seu problema pode ser solucionado…
Abraços

Ja pensei nisso.
Mas deixar o array ser iniciado no construtor não é a melhor opção.
eu deixei assim só para testar.
O certo é ser definido na hora de criar a empresa, o usuário que definiria quantas vagas vão existir na empresa.

alterei o construtor para ficar mais facil:

[code]public class Empresa {
String nome;
String cnpj;
Funcionario[] empregados;
int contador;

Empresa(int f) {
	this.empregados = new Funcionario[f];
}

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


void mostra() {
	for (Funcionario x : this.empregados) {
		String y = x.nome;
		System.out.println(y);

	}
}

}
[/code]

Você poderia usar o “length” e comparar para ver quantos funcionários foram inseridos.

Para o que vc quer fazer tenta usar ArrayList, assim não precisa se preocupar se o array está cheio ou não nem criar um novo array maior.

[quote=andersouza]alterei o construtor para ficar mais facil:

[code]public class Empresa {
String nome;
String cnpj;
Funcionario[] empregados;
int contador;
private int numFuncionario;

Empresa(int f) {
	this.empregados = new Funcionario[f];
                              numFuncionario = f;
}

void adiciona(Funcionario f) {
              contador ++;
             if(contador<= numFuncionario )   
                       {
	for (int i = 0; i < this.empregados.length; i++) {
		if (this.empregados[i] == null) {
			this.empregados[i] = f;
			break;
		} else {
			continue;
		}
	}

}
}

void mostra() {
	for (Funcionario x : this.empregados) {
		String y = x.nome;
		System.out.println(y);

	}
}

}
[/code][/quote]

Não quero usar o arraylist por enquanto porque quero fixar melhor os conceitos.
Diego, desse jeito o numFuncionario sempre vai ser igual o tamanho do array, porque ambos usam o f como referencia.

Consegui resolver enviando uma mensagem avisando que o funcionario não foi inserido.
Acredito que daqui pra criar um novo array maior seja mais facil.
Apenas para registro:

[code]public class Empresa {
String nome;
String cnpj;
Funcionario[] empregados;
int contador;

Empresa(int f) {
	this.empregados = new Funcionario[f];
}

void adiciona(Funcionario f) {
	int contador = 0;
	for (int i = 0; i < this.empregados.length; i++) {
		if (this.empregados[i] != null) {
			contador += 1;
		}
	}
	if (contador < this.empregados.length) {
		for (int i = 0; i < this.empregados.length; i++) {
			if (this.empregados[i] == null) {
				this.empregados[i] = f;
				break;
			} else {
				continue;
			}
		}
	}else{
		System.out.println("Todas as vagas ja foram preenchidas");
		System.out.println("O funcionário "+f.nome+" não foi inserido");
	}
}

[/code]

Mas ainda acho que esse seja um jeito muito forçado.
Se alguem tiver uma alternativa, agradeço :smiley:

 void adiciona(Funcionario f) {  
        if(empregados[empregados.length -1] != null)
        {
               throw new Exception(&quot;Empresa sem vaga para contratação&quot;);
        }

        for (int i = 0; i &lt; this.empregados.length; i++) {  
            if (this.empregados[i] == null) {  
                this.empregados[i] = f;  
                break;  
            } else {  
                continue;  
            }  
        }  
    }  

Fiz uma pequena alteração no seu metodo adicionar, verifica se o array esta cheio se estiver lança uma excessao, senaum segu o ffluxo e adiciona o empregado
o que acha?

Pensei mesmo em lançar uma exceção.
Mas estou meio relutando a isso ainda.
De qualquer jeito, abriu meus olhos.

Vlw galera, me ajudaram bastante.