Erro de metodo [Resolvido]

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); 
  
  
  }
}
 

aumento += salário;

é equivalente a:

aumento = aumento + salário;

quando provavelmente você queria:

salário = salário + aumento;

Se tiver dúvida com os operadores abreviados, não os use.

Qual o erro q ta dando?

pq pela lógica, tanto faz aumento = aumento + salário; qnto salário = salário + aumento;

E o método bonifica nçao está sendo chamado em nenhum lugar.

cara,
seu método

double  bonifica(double aumento){  
    return aumento += salario;  
} 

tá fora da sua classe Funcionario.
Experimenta colocar dentro dela

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

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)

[quote=Guilherme Tsubauchi]cara,
seu método

double  bonifica(double aumento){  
    return aumento += salario;  
} 

tá fora da sua classe Funcionario.
Experimenta colocar dentro dela

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

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]

Tente fazer o que o cara acima disse.

Abraços e fique com DEUS.

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=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:

objeto.nomedoMetodo(parametros);

No caso seria:

f1.bonifica(aumento);

Lembre-se que métodos SEMPRE têm ().

Opa, e ae!

como usar o método Sem_Nome já explicou, qto a sua outra dúvida,

não entendi o que você quis dizer, explica melhor ae.

Boa noite Guilherme Tsubauchi .

Tenho que criar estes metodos fora do main ou não ? E depois invocar este metodo dentro main ? E como diferencia-los ?

Obrigado !

[quote=edutec85]Boa noite Guilherme Tsubauchi .

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:

double bonifica(double aumento){ return this.salario += aumento; }

Desta forma, você retorna o atributo salário com o aumento indicado no parâmetro.

Pelo que percebi essas são suas principais dúvidas, e se escrevi bobagem alguém me corrija também pois tenho pouco tempo de Java. :stuck_out_tongue:

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 Funcionario{         
    String nome;     
    String departamento;     
    double salario;     
    String dataEntrada;     
    String rg;     
    boolean ativo;     
    double aumento;     
    double bonificacao;       

    double bonificacao(double aumento){     
        return this.salario += aumento;     
    }   
}

Agora você pode invocá-lo no main:

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);

xNato segue o codigo com as alterações , rodei o mesmo funcionou … apenas para verificar se ainda falta algo !

class Funcionario{           
    String nome;       
    String departamento;       
    double salario;       
    String dataEntrada;       
    String rg;       
    boolean ativo;       
    double aumento;       
    double bonificacao;         
  
    double bonificacao(double aumento){       
        return this.salario += aumento;       
   }     
}  
 class TestaFuncionario{  
    public static void main(String [] args){
    
     Funcionario f1 = new Funcionario();
     
     f1.nome = "Eduardo";
     f1.departamento ="TI";
     f1.salario = 120.00;
     f1.dataEntrada = "120312";
     f1.rg = "1123456";
     f1.bonificacao = (50);
     f1.ativo = true;
     f1.aumento = f1.salario+f1.bonificacao;
     
     double novoSalario = f1.bonificacao(50); 
     	  
     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("Bonificacao;"+f1.bonificacao);
     System.out.println("Funcionário ativo:"+f1.ativo);
     System.out.println("Seu novo salário é: "+novoSalario); 
  } 
   
 }

Opa, outro detalhe,

no seu método bonificacao

double bonificacao(double aumento){ return this.salario += aumento; }

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 !