Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Dúvida no Ex. 1 da Aula 3 - Começando com Orientação a objetos

Olá pessoal, recorri ao fórum para tentar solucionar algumas dúvidas, e consegui resolver boa parte dos meus problemas. Porém, não consigo solucionar o seguinte problema:

class Funcionario {


String nome;
String departamento;
double salario;
String admissao;
int rg;

void recebeAumento(double aumentoSalario){
this.salario+=aumentoSalario;}

double CalculaGanhoAnual(){

return (this.salario * 12);
}


}

public class Dados{

public static void main(String[]args){

Funcionario thiago= new Funcionario();

thiago.departamento= "Administrativo";
thiago.salario= 3000.00;
thiago.admissao= "10 março 2012";
thiago.rg=12345;
thiago.RecebeAumento(1000.00);
thiago.CalculaGanhoAnual(thiago.salario*12);

System.out.println(thiago.departamento);
System.out.println(thiago.salario);
System.out.println(thiago.admissao);
System.out.println(thiago.rg);
System.out.println(thiago.CalculaGanhoAnual());

}

}

Me aparece o seguinte erro:

linha 34: method CalculaGanhoAnual in class Funcionario cannot be applied to given types ; thiago.CalculaGanhoAnual(thiago.salario*12);

required: no arguments found: double reason: actual and formal argument lists differ in length.

3 respostas
solução!

Vamos lá amigão, vou te ajudar. Vamos por partes!

Editei o seu código com a formatação correta para ficar melhor para te ajudar.

  1. Você tem que ter a percepção no qual java é case sensitive, ou seja, ele consegue identificar letras maiúsculas e letras minúsculas.

O seu primeiro erro foi aqui:

thiago.RecebeAumento(1000.00);

Conseguiu identificar o erro?

Perceba que na sua classe Funcionário você criou o método como recebeAumento e na classe que contém o método main você chama o método como RecebeAumento, não vai rodar por causa da questão do case sensitive.

Beleza? muita atenção quanto a esse ponto.

Então tudo certo, vamos ao outro ponto.

O outro erro você cometeu aqui:

thiago.CalculaGanhoAnual(thiago.salario*12);

Veja bem, você criou um método que já faz o calculo do salário * 12, correto?

Entao deixa eu entender, você tá tentando passar um método com um parâmetro no caso thiago.salario*12 e depois multiplicar por mais 12 dentro do método? haha. Não vai funcionar brother!

Primeiro porquê você não passou nenhum parâmetro para o método na hora de criar.

Confira aqui:

double CalculaGanhoAnual() {
    return (this.salario * 12);
}

Certo?

quando você chama o método você tenta passar o seguinte parâmetro thiago.salario*12. Não precisa, apenas chame o método normal!

Seu código fica assim então:

public class Dados {
    public static void main(String[] args) {

        Funcionario thiago = new Funcionario();

        thiago.departamento = "Administrativo";
        thiago.salario = 300.00;
        thiago.admissao = "10 março 2012";
        thiago.rg = 12345;
        thiago.recebeAumento(1000.00);
        thiago.CalculaGanhoAnual();

        System.out.println(thiago.departamento);
        System.out.println(thiago.salario);
        System.out.println(thiago.admissao);
        System.out.println(thiago.rg);
        System.out.println("Ganho Anual: " + thiago.calculaGanhoAnual());

    }

Só um detalhe, muito cuidado ao criar padrões quando você estiver programando. Por exemplo:

Aqui você fez assim:

void recebeAumento(double aumentoSalario) {
    this.salario+=aumentoSalario;
}

E aqui assim:

double CalculaGanhoAnual() {
    return (this.salario * 12);
}

Poderia ter feito assim:

double CalculaGanhoAnual() {
    return this.salario *= 12;

Seguindo o padrão.

Outro detalhe:

Nome de métodos são elaborados da seguinte maneira:

primeira letra minúscula e a primeira letra da segunda palavra maiúscula.

Ex: calculaGanhoAnual

A equipe Alura agradeçe, disponha para novas dúvidas.

Ola Thiago !

Perceba no enunciado do exercício 1, ele pede o seguinte : "... Crie também um método calculaGanhoAnual, que não recebe parâmetro algum, devolvendo o valor do salário multiplicado por 12 ..."

esse metodo, """ calculaGanhoAnual """ não receberá parâmetros.

Olha como vc criou:

double CalculaGanhoAnual() {
    return (this.salario * 12);
}

Olha como você esta usando ele:

thiago.CalculaGanhoAnual(thiago.salario*12);

Percebeu ?

Você esta tentando passar parâmetro para um método que não pode receber parâmetro.

Thiago, tudo bem?

O erro está em você não ter definido parâmetro a ser recebido quando criou o método calculaGanhoAnual(),

double CalculaGanhoAnual() {
    return (this.salario * 12);
}

no entanto tentou passar um parâmetro ao acessar o método (thiago.salario*12).

thiago.CalculaGanhoAnual(thiago.salario*12);

A orientação foi que você buscasse o erro justamente nessa situação dos argumentos passados quando o método foi invocado:

required: no arguments found: double reason: actual and formal argument lists differ in length. Já em relação à convenção de código havia documentação definida que ainda é utilizada por muitos programadores java, e você pode verificar em http://www.oracle.com/technetwork/java/codeconvtoc-136057.html

João Rodolfo