Array - verificar se esta cheio [RESOLVIDO]

11 respostas
andersouza

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:

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);

		}
	}

}

Vlw.

11 Respostas

diego.sas

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
          } 
        }   
    }
nel

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.

diego.sas

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

andersouza

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.

andersouza

alterei o construtor para ficar mais facil:

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);

		}
	}

}
rafaelrodrigues1607

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

Enadrov

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.

diego.sas
andersouza:
alterei o construtor para ficar mais facil:
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);

		}
	}

}
andersouza

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:
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");
		}
	}

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

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

        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?

andersouza

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.

Criado 2 de fevereiro de 2012
Ultima resposta 2 de fev. de 2012
Respostas 11
Participantes 6