[RESOLVIDO]duvida exercício 5 do capitulo 5 da Caelum

Bom galera , estou iniciando em programação e estou tendo dificuldade no metodo Contem da classe Empresa , não consigo fazer percorrer o vetor pra saber se o funcionário está ou não dentro da empresa.

[code]class TestaEmpresa
{
public static void main(String[] args)
{Empresa empresa = new Empresa();
empresa.empregados = new Funcionario[5];

 Funcionario f2 = new Funcionario();
 f2.salario = 610.00;
 empresa.Adiciona(f2);	 
 Funcionario f3  = new Funcionario();
 f3.salario = 1000;
 empresa.Adiciona(f3);


   empresa.Mostra();

   System.out.println(empresa.Contem(f2));

   
}

}

class Empresa
{boolean verifica;
int posicao;
String nome,cnpj,fone;
Funcionario[] empregados;

void Adiciona( Funcionario f){
	
		empregados[posicao] = f;
		posicao++;

	
}

void Mostra(){
	for (int i = 0; i < empregados.length ;i++ ){
		if (empregados[i] != null){
			System.out.println("Funcionario "+ (i+1));
			System.out.println("Salario inicial = "+ empregados[i].salario);
		}
		else
			break;
	}
}

// O problema se encontra nesse método !
boolean Contem( Funcionario f ){
for (int i = 0; i < empregados.length ;i++ ){

	  if (f == empregados[i])
		 verifica = true;
		else
			if (f != empregados[i])
			verifica = false;
	}

	return verifica;
}

}

[/code]

Ele lança alguma exceção?

só encontrei um problema

if (f == empregados[i])  
    verifica = true;  
else  
if (f != empregados[i])  
    verifica = false; 

se você vai usar o else, tem que colocar as chaves { } do if…
senão vai dar pau mesmo

botei as chaves e não mudou , ele fica só retornando false , o funcionario estando dentro do array ou não .

Só faltou um detalhe jo?Paulo

Você precisa retornar “true” no momento que ele encontra um funcionario, pois a pesquisa seguinte pode retornar false. Tenta desta forma:

	// O problema se encontra nesse método !
	boolean Contem(Funcionario f) {
		for (int i = 0; i < empregados.length; i++) {
			if (f.equals(empregados[i])) {
				return true;
			}
			else if (f != empregados[i])
				verifica = false;
		}

		return verifica;
	}

é porque você continua sua iteração…
exemplo… se vc tem 3 funcionarios na lista… e busca pelo primeiro… ele vai setar pra true no seu if

agora ele não para de iterar… portanto vai olhar a próxima posição… se não for igual ele seta pra false…
tente assim:

if (f == empregados[i]){    
    verifica = true;    
    break;
}

tire seu else

Vamos deixar o código um pouco mais limpo e tirar a variavel auxiliar “verifica”

	boolean Contem(Funcionario f) {
		for (int i = 0; i < empregados.length; i++) {
			if (f.equals(empregados[i]))
				return true;
		}
		return false;
	}

Bom, vamos lá:

1 - primeiramente, como a variável verifica, você só irá usar no escopo de verificação, do metodo Contem, declare ela como local de metodo e retire do atributo da sua classe.
2 - após o verifica, você poderia usar a instrução break, mas creio que algum professor irá explicar ela pra você com calma. por enquanto, você pode se concetrar neste código:
3 - SEMPRE coloque chaves depois de uma instrução IF, principalmente agora que você está aprendendo a programar.

// O problema se encontra nesse método !
	boolean Contem( Funcionario f ){
               boolean verifica = false;
		for (int i = 0; i < empregados.length ;i++ ){ 
		
		  if (f == empregados[i]) {
			 verifica = true;
                   }
		}

		return verifica;
	}

se tiver mais duvidas, posta que a galera ajuda.

[]'s

E se possível sempre esqueça variáveis auxiliares :wink:

E já que vc está começando, brinque com foreach tb = )

	boolean Contem(Funcionario f) {
		for (Funcionario e : empregados) {
			if (e.equals(f)) {
				return true;
			}
		}
		return false;
	}

Abs!

Quando eu boto a variável auxiliar dentro do escopo , tem que inicializar ela com false , eu pensei que era nela que estava o erro por isso eu botei na classe .

Deu certo , vlw galera :smiley: .