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:
classEmpresa{Stringnome;Stringcnpj;Funcionario[]vetFuncionarios=newFuncionario[3];voidadiciona(Funcionariof){for(intcont=0;cont<this.vetFuncionarios.length;cont++){if(this.vetFuncionarios[cont]==null){System.out.println("Adicionando Funcionario: "+cont);this.vetFuncionarios[cont]=f;break;}elseif(cont==this.vetFuncionarios.length-1)System.out.println("A array está cheia");}}booleancontem(Funcionariof){for(intcont=0;cont<this.vetFuncionarios.length;cont++){if(this.vetFuncionarios[cont]==f){break;returntrue;}else{if(cont==this.vetFuncionarios.length-1)returnfalse;}}}}
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.
danielbussade
Obrigado. Eu mudei o código agora, mas me gerou outro erro.
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.
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 ?
Obrigado Sérgio, realmente agora entendi o que estava fazendo de errado!
LPJava
o erro está nessa linha:
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: