Boa tarde Pessoal … Estou estudando pela apostila da Caelum FJ-11 , e estou tentando resolver o exercicio 4.12 , onde pede o seguinte :
Modele um funcionário. Ele deve ter o nome do funcionário, o departamento onde trabalha, seu salário, a data de entrada no banco, seu RG e um valor booleano que indique se o funcionário está na empresa no momento ou se já foi embora.
Você deve criar alguns métodos de acordo com sua necessidade. Além deles, crie um método bonifica que aumenta o salario do funcionário de acordo com o parâmetro passado como argumento. Crie, também, um método demite, que não recebe parâmetro algum, só modifica o valor booleano indicando que o funcionário não trabalha mais aqui.
A idéia aqui é apenas modelar, isto é, só identifique que informações são importantes e o que um funcionário faz."
Não entendi direito como utilizar os métodos “bonifica” e “demite”
De fato, fiquei um pouco confuso com o que deve ser feito, mas conseguir desenvolver como se segue. O problema e quando executado ocorre um erro no metodo bonifica.
Gostaria de saber o que esta ocorrendo ?
Desde ja agradeço.
class Funcionario{
String nome;
String departamento;
double salario;
String dataEntrada;
String rg;
boolean ativo;
double aumento;
double bonifica;
}
double bonifica(double aumento){
return aumento += salario;
}
class TestaFuncionario{
public static void main(String [] args){
Funcionario f1 = new Funcionario();
f1.nome = "Eduardo";
f1.departamento ="TI";
f1.salario = 120.00;
f1.dataEntrada = "12/03/12";
f1.rg = "1123456";
f1.ativo = true;
f1.bonifica = (50);
f1.aumento = f1.salario+f1.bonifica;
System.out.println("O nome do funcionario"+f1.nome);
System.out.println("Departamento"+f1.departamento);
System.out.println("Salario"+f1.salario);
System.out.println("Data da Entrada"+f1.dataEntrada);
System.out.println("RG"+f1.rg);
System.out.println("Funcionário ativo"+f1.ativo);
System.out.println("Bonificação"+f1.bonifica);
System.out.println("Aumento de salario"+f1.aumento);
}
}
Outra pira, dentro do sua main, em nenhum momento tu chama o método bonifica(), vc só chama o atributo bonifica, nada te impede de criar métodos e atributos com o mesmo nome, mas é melhor diferenciar eles pra não confundir depois.
Dica: se você gosta de gramática da lingua portuguesa, acostume-se a tentar usar substantivos para os atributos e verbos para os nomes dos métodos. Isso ajuda a desfazer confusões.
Exemplo:
atributos: salario, aumento, bonificacao
verbos: aumentar, bonificar, obterSalario (ou getSalario - misturando português com inglês, mas está OK)
Outra pira, dentro do sua main, em nenhum momento tu chama o método bonifica(), vc só chama o atributo bonifica, nada te impede de criar métodos e atributos com o mesmo nome, mas é melhor diferenciar eles pra não confundir depois.[/quote]
Boa tarde Guilherme Tsubauchi , como chamar o método bonifica , já pesquisei e não encontro de fato uma forma abrangente , na apostila não mostra uma forma de chamar um método… Posso estar equivocado ! Outra duvida como posso criar métodos e atributos com o mesmo nome , mesmo com nomes diferentes !
[quote=edutec85]Boa tarde Guilherme Tsubauchi , como chamar o método bonifica , já pesquisei e não encontro de fato uma forma abrangente , na apostila não mostra uma forma de chamar um método… Posso estar equivocado ! Outra duvida como posso criar métodos e atributos com o mesmo nome , mesmo com nomes diferentes !
Desde já agradeço.[/quote]
Para você chamar o método bonifica você tem que fazer assim:
Tenho que criar estes metodos fora do main ou não ? E depois invocar este metodo dentro main ? E como diferencia-los ?
Obrigado ![/quote]
O método bonifica que você quer fazer é um método para o funcionário, você irá bonificar o funcionário. Logo, esse método fica na classe do funcionário. Considerando agora que existe o método bonifica na classe de funcionário, você pode invocar ela no seu main, apenas escrevendo f1.bonifica(aumento); , onde aumento = o valor do aumento que você deseja. Agora creio que o problema aqui esteja no próprio método bonifica, que retorna aumento += salario. Bom, agora existem dois “aumento” no seu código: um é o atributo de Funcionario, e o outro é o parâmetro no método bonifica, sendo que este segundo só existirá dentro do próprio método obviamente. Para usar o atributo dentro do método em vez do parâmetro, use this.aumento. Esse é o problema no seu método. Você tá modificando o próprio parâmetro aumento, o que é impossível já que se trata do parâmetro do próprio método! Você quer retornar o valor do SALÁRIO MAIS O AUMENTO passado como parâmetro, certo? Se este é o caso, faça o seguinte:
Boa noite xNato … inseri o metodo e chamei o mesmo conforme a sua dica , mas esta ocorrendo erro, estou errando em algum trecho mas nao estou detectando este erro , segue o codigo abaixo para visualizar melhor ok! Obrigado!
class Funcionario{
String nome;
String departamento;
double salarioAtual;
String dataEntrada;
String rg;
boolean ativo;
double aumento;
double bonificacao;
// metodo para o funcionario
double bonificacao(double aumento){
return aumento + salarioAtual;
}
}
class TestaFuncionario{
public static void main(String [] args){
Funcionario f1 = new Funcionario();
f1.nome = "Eduardo";
f1.departamento ="TI";
f1.salarioAtual = 120.00;
f1.dataEntrada = "120312";
f1.rg = "1123456";
f1.bonificacao = (50);
f1.ativo = true;
f1.aumento = f1.salarioAtual+f1.bonificacao;
f1.bonificacao(aumento); // invocar o metodo funcionario ?
// retorna o valor do salario mais o aumento passado como parâmetro
double bonificacao(double aumento){
return this.salario += aumento;
}
System.out.println("O nome do funcionario:"+f1.nome);
System.out.println("Departamento:"+f1.departamento);
System.out.println("Salario Atual:"+f1.salarioAtual);
System.out.println("Data da Entrada:"+f1.dataEntrada);
System.out.println("RG:"+f1.rg);
System.out.println("Bonificação:"+f1.bonificacao);
System.out.println("Funcionário ativo:"+f1.ativo);
System.out.println("Salario com a bonificação:"+f1.aumento);
}
}
Você se enrolou ae ^^ o método bonificacao ficará na classe funcionario, a na classe main você apenas invocará esse método. Sua classe funcionario ficara assim:
class TestaFuncionario{
public static void main(String[] args){
Funcionario f1 = new Funcionario();
//definindo o salário
f1.salario = 500.0;
//invocando o método, e atribuindo o valor retornado para a variável novoSalario
double novoSalario = f1.bonificacao(100.0);
//mostrando na tela
System.out.println("Seu novo salário é: "+novoSalario);
Você já está atribuindo o valor ao atributo salario do seu objeto funcionario diretamente, logo, talvez não seja necessário esse retorno do valor no método, podendo ele retornar nada no momento (void).
Não tá errado, é só uma idéia.
Bom dia pessoal … então conforme as dicas que seguir o codigo esta correto , vou inserir mais outros trechos de codigos que pede na apostila … na altura que surgir duvidas irei postando Ok … Muito obrigado a todos pela atenção !