Equals(void)

Bom dia pessoal estou aqui de novo usando e abusando do forum rs, bom é assim estou fazendo o seguinte exercicio do Caalum “Crie os getters e setters da sua classe Empresa e coloque seus atributos como private. Lembrese de que não necessariamente todos os atributos devem ter getters e setters.”. Bom comecei a fazer o exercicio mas estou me deparando em um erro num metodo boolean desta classe o seguinte erro é apresentado para mim “Cannot invoke equals(void) on the primitive type void”. nestá linha:

if (f.setNome(nome).equals(this.empregados[i].setNome(nome))

Vejam o metodo:

Funcionario[] empregados;
	
	public boolean contem(Funcionario f, String nome, String cnpj)
	{
    	if (f == null){
    		return false;
    	}
    	for (int i = 0; i <= this.empregados.length; i++) {
    		if (this.empregados[i] != null){   			    		
    			if (f.setNome(nome).equals(this.empregados[i].setNome(nome))    					
	    		{
	    			System.out.println("Funcionario "+f.Nome+" já trabalha nesta empresa");
	    			return true;
	    		}
    		}
    		else{
    	    	System.out.println("O Funcionário "+f.Nome+" não trabalha conosco");
    	    	return false;
    		}
    	}
    	System.out.println("O Funcionário "+f.Nome+" não trabalha conosco");
    	return false;
	}

Por acaso você não está passando uma String para um campo Int ?
Grifei em negrito :

if (f.setNome(nome).equals(this.empregados[i].setNome(nome))

Qual o tipo que empregados[i] deve receber ?

empregados[i] vai receber String o nome do funcionario e verificar se ele já é funcionario se não for ele vai falar que é vice verça

@CLAJMCARDOSO

O problema é que tu tá usando o método set na comparação, o Java tá entendo que tu está escrevendo no atributo daí dentro do equals ele não está recebendo valor e ficando nullo.

Sem ver seu código mas eu imagino que o método setNome() é usado para alterar o valor do atributo na classe funcionário, logo deve existir um método getNome() que é para recuperar e vai trazer um dado do tipo String. Se eu estiver correto no seu caso ele vai reclamar porque não tá comparando nenhum valor já que o método setNome() não tem retorno de nada e é do tipo void.

Abraço.

Ptz é isso mesmo estou confundindo um puco quando devo usar o gett ou setter vou estudar mais a respeito

Agora e veio outra duvida em cima desse exercício na classe TestaEmpresa como devo fazer a chamada para a criação do array veja como estou fazendo;

	emp.empregados = new Funcionario[10];  
	emp.empregados[0] = new Funcionario("Claudio Jose", data, "Gerente", 2000);    
	emp.empregados[1] = new Funcionario("Debora Barcelete", data, "Auxiliar de limpeza", 900);    
	emp.empregados[2] = new Funcionario("Bianca Lima Cardoso", data, "Auxiliar de manutenção", 800);    
	emp.empregados[3] = new Funcionario("Thais Cardoso Lima", data, "Auxiliar de serviços Gerais", 800);
	
    for (int i = 0; i < emp.empregados.length; i++) {    
    	emp.adiciona(emp.empregados[i]);    
    }

Esta dando erro no array “The field Empresa.empregados is not visible”

@CLAJMCARDOSO

Até onde sei esse erro é porque o atributo não está acessível, ou seja, está como private e isso é correto. Você deveria usar os getters/setters para manipular eles.

Usuando ArrayList() ficaria algo assim:

// Inicia o array com o retorno para classe de Funcionario()
List funcList = new ArrayList();

// Inicia o objeto
Funcionario func = new Funcionario(“Claudio Jose”, data, “Gerente”, 2000); // Objeto de funcionário

funcList.add(func); // Adiciona para a lista o novo funcionário

Dá uma lida sobre as coleções em Java que vai te ajudar a resolver essa questão.

Abraço.

isso mesmo perfeito agora funcionou coloquei a criação do array como public.

Para zerar o exercício estou com um probleminha no método contem ele verifica se o funcionario está cadastrado ou não e informa a mensagem ele só aparece que não está cadastrado veja a classe.

public Funcionario[] empregados;

public boolean contem(Funcionario f, String nome)
{
	if (f == null){
		return false;
	}
	for (int i = 0; i <= this.empregados.length; i++) {
		if (this.empregados[i] != null){   			    		
			if (f.getNome().equals(this.empregados[i].getNome()))    					
    		{
    			System.out.println("Funcionario "+ f.getNome() +" já trabalha nesta empresa");
    			return true;
    		}
		}
		else{
	    	System.out.println("O Funcionário " + f.getNome() +" não trabalha conosco");
	    	return false;
		}
	}
	System.out.println("O Funcionário " + f.getNome() +" não trabalha conosco");
	return false;
}

Tente utilizar o código conforme abaixo:

1 curtida

não funcionou continua aparecendo só funcionario não cadastrado