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

10 respostas
J

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.

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

}

10 Respostas

Rodrigo_Sasaki

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

J

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

AlexandreGama

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;
	}
Rodrigo_Sasaki

é 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

AlexandreGama

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;
	}
WRYEL

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

AlexandreGama

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

AlexandreGama

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!

J

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 .

J

Deu certo , vlw galera :smiley: .

Criado 17 de abril de 2012
Ultima resposta 17 de abr. de 2012
Respostas 10
Participantes 4