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