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:
[code]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;
}
}
}[/code]
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?
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 …
Ah perdão, o que acontece é que a chamda do adicionar() estava dentro de um for em outra classe.
Assim ó:
[code]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);
}
}
}[/code]
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)
Acho q não vai funcionar mesmo, já que vc poderá excluir alguém e esta posição ficará vazia, daí como resolver isso??
São esses problemas que eu não consegui solucionar.
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.
Acho que vou seguir a sua sugestã, pelo menos a aplicação estará funcionando.