Boa tarde sou iniciante em java, e já tentei de todas as formas, mas este meu código não compila. Alguém poderia me ajudar a achar o erro. Eis o código:
class Empresa {
String nome;
String cnpj;
Funcionario [ ] vetFuncionarios= new Funcionario[3];
void adiciona(Funcionario f) {
for(int cont=0;cont<this.vetFuncionarios.length;cont++) {
if (this.vetFuncionarios[cont]==null) {
System.out.println("Adicionando Funcionario: " + cont );
this.vetFuncionarios[cont]=f;
break;
}
else
if (cont==this.vetFuncionarios.length - 1)
System.out.println("A array está cheia");
}
}
boolean contem(Funcionario f) {
for(int cont=0;cont<this.vetFuncionarios.length;cont++) {
if (this.vetFuncionarios[cont]==f) {
break;
return true;
}
else {
if (cont==this.vetFuncionarios.length - 1)
return false;
}
}
}
}
O erro está no metodo contém , este método me diz se já existe uma referencia f, na minha Array de Funcionarios, mas o erro que dá é unreachable statement?
Porque dá este erro?
se a instrução break vem antes de return , o return nunca acontecerá porque o break sempre colapsa o fluxo para o inicio do for. Logo a intrução return é inalcansável e o java reporta isso como uma exceção de compilação.
boolean contem(Funcionario f) {
for(int cont=0;cont<this.vetFuncionarios.length;cont++) {
if (this.vetFuncionarios[cont]==f) {
break; // aqui está o erro
return true;
}
else {
if (cont==this.vetFuncionarios.length - 1)
return false;
}
}
}
Use o eclipse ou outra ide para o ajudar a identificar os problemas.
As instruções break e return são imcompativeis. Se vc quer sair do for retornando um valor só precisa do return.
O for será automáticamente interrompido. Se vc quer parar o for e continuar fora dele use o break e não o return.
O erro agora eh missing return statement, tá dizendo que falta o retorno de declaração, mas eu já coloquei o retorno certo desta vez.
[/quote]
Parece que está com problemas para entender o fluxo.
VC faz um for, se uma certa condição for verdadeira retorna true, se a condição é falsa retorna false.
Para que é que serve o for afinal se na primeira vez que vc faz o teste já retorna um resultado ?
não será que vc quer fazer isto
boolean contem(Funcionario f) {
for(int cont=0;cont<this.vetFuncionarios.length;cont++) {
if (this.vetFuncionarios[cont]==f && cont<this.vetFuncionarios.length - 1)
return true; // se algunma das posiçoes encontrou
}
}
return false; // se nenhuma deu certo . repara que isto fica fora do for
}
if (cont==this.vetFuncionarios.length - 1)
return false;
devido essa execucao nao ser garantida… entao… se isso for false… qual é o tipo de return do seu metodo? Não tem… e nesse caso seu metodo tem que ter um tipo de return.
mude assim: