Verificar se aray está cheio

6 respostas
andrepm

Pessoal,

Pesquisei no fórum e achei um tópico mas não entendi muito bem as soluções dadas, são conceitos que ainda não conheço.

Tenho seguinte código:

public class Empresa {

	String nome, cnpj;
	Funcionario[] empregados = new Funcionario[10];
	int i;
	

	void adicionar(Funcionario f,int i){
		if (this.empregados[i] == null) {
			this.empregados[i] = f;						
		} else {
			System.out.println("Array cheio");
		}
		
	}
	void mostraArray (){
		for (Funcionario x : empregados){
			if (x != null){
				System.out.println(x.salario);
			} 	
		}
	}

	boolean contem(Funcionario f) {
		if (f.demitido == false){
			System.out.println("Funcionário ainda da empresa");
			return true;
		} else {
			System.out.println("Funcionário não esta empresa");
			return false;
		}
		
	}

}

No método adicionar, preciso fazer uma verificação se o array está cheio, mas a solução que eu adotei me pareceu um pouco de gabiarra rs. Por que isso só funciona se a adição de valores no array for indo do 0 ao 9 direitinho, mas se antes disso eu adicionar um valor em uma posição aleatório, a solução não irá servir.

Alguém pode me ajudar por favor?

6 Respostas

A

Não tem muito sentido esse método de verificar se o array tá cheio.
Porque ele faz somente verificar se a posição é nula .

Uma alternativa era fazer um for ( (Funcionario x : empregados) para verificar se existe alguma posição null. dai se tiver ele insere na primeira que tiver e fim do for . caso contrário ele dá aquela mensagem de cheio.

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

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

} else …

andrepm

Ah perdão, o que acontece é que a chamda do adicionar() estava dentro de um for em outra classe.

Assim ó:

public class TestaEmpresa {

	public static void main(String[] args) {

		Empresa a = new Empresa ();

		Funcionario b = new Funcionario();
		b.salario = 2000.0;
		a.empregados[2] = b;

		for (int i = 0; i < 5; i++) {
			Funcionario f = new Funcionario();
			f.salario = 1000.0 + i;
			a.adicionar(f,i);
			//f.demite();
			a.contem(f);
		}
}
}

De qualquer forma, assim ele vai verificar posição por posição sequencial (verifica posição 0, verifica posição 1, verifica posição 2 e assim vai...)

Queria verificar tudo sem precisar ser sequencial pq como eu disse, se eu adicionar em alguma momento algum registro na posição 5 e depois em um for adicionar a posição 1, essa solução não vai funcionar (deu pra entender? rs)

A

Acho q não vai funcionar mesmo, já que vc poderá excluir alguém e esta posição ficará vazia, daí como resolver isso??

andrepm

São esses problemas que eu não consegui solucionar.

A

E o que vc quer fazer ???

ACho que vc deveria tirar o loop do programa e colocá-lo no método diretamente.

fica mais ou menos assim:

void adiciona(Funcionario f,int i){

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

{

if (empregados[i]==null ) {

empregados[i] = f ;

return;

}
}

System.out.println(“Array cheio”);

}

Cada vez que ele achar um null ele insere nessa posição e depois termina o método , se ele não achar nenhuma posição vazia, dá mensagem de array cheio , só que dessa vez no final do método.

andrepm

Acho que vou seguir a sua sugestã, pelo menos a aplicação estará funcionando.

Criado 14 de março de 2014
Ultima resposta 18 de mar. de 2014
Respostas 6
Participantes 2