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

Estou com dúvida no curso de Primeiros passos com Java, no exercício do capítulo Começando com Orientação a objetos.

Na classe TestaFuncionário...não consegui executar os métodos e fazê-los trazer a informação...consegui a informação quando essa era solicitada dentro do próprio método.?!?!

Abaixo as duas classes

import java.util.Date;

class Funcionario { String nome; double salario; String banco; int agencia; int contacorrente; boolean estaDeFerias; // Pessoa titular; Date dtDeEntradaNoBanco;

void recebeAumento(double valorDoAumento) { this.salario += valorDoAumento; System.out.println("salario com aumento:" + this.salario);

}

double calculaGanhoAnual() { double salarioAnual = 0.0; System.out.println ("++Ganho anual="+ this.salario * 12); return 0; }

}

class TestaFuncionario {

public static void main(String[] args) { Funcionario f1 = new Funcionario();

f1.nome = "Hugo"; f1.salario = 100; f1.recebeAumento(50);

System.out.println("Nome :" + f1.nome); System.out.println("salario atual:" + f1.salario); // System.out.println("salario com aumento:" + f1.recebeAumento(50)); System.out.println("ganho anual:" + f1.calculaGanhoAnual()); // não printa...printa somente na classe Funcionário ?!?! }

5 respostas

Marcos, pelo o que eu entendi, você está imprimindo o método f1.recebeAumento(50), mas você já passou o valor ao iniciar o void main. O ideal em programação O.O, é vc acessar métodos publicos, e os métodos acessarem as variáveis da classe em questão.

Thiago, o Marcos está começando agora. Esse conceito de encapsulamento ele vai ver nos próximos capítulos. Nesse que ele está com dúvida ele vê somente métodos pura e simplesmente.

Marcos, a questão é como você fez o seu método calculaGanhoAnual. Veja:

double calculaGanhoAnual() { 
    double salarioAnual = 0.0;
    System.out.println("++Ganho anual="+ this.salario * 12); 
    return 0; 
}

Veja que você calcula o ganho anual dele direitinho, mas você imprime o valor direto no System.out.println. Porém, o método tem como retorno um double. O que você tinha de retornar era justamente esse cálculo.

Veja de novo o nome do método: calculaGanhoAnual. Ou seja, o método fará o cálculo e retornará o resultado. Não é responsabilidade do método imprimir o ganho. Isso será feito no seu programa, no método main. Então, seu código deveria ser:

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

Aí sim, o código que você fez no main funciona:

class TestaFuncionario {
    public static void main(String[] args) {
        Funcionario f1 = new Funcionario();
        f1.nome = "Hugo"; f1.salario = 100;
        f1.recebeAumento(50);

        System.out.println("Nome :" + f1.nome);
        System.out.println("salario atual:" + f1.salario); 
        // System.out.println("salario com aumento:" + f1.recebeAumento(50)); 
        System.out.println("ganho anual:" + f1.calculaGanhoAnual());
    }
}

Ajudou?

Obrigado pelo retorno Arthur...pois é..estamos antes do início.rsrs Tentei printar o salario com aumento ( dentro da Linha que está comentada), mas tbem não deu... Criei outra variável para receber f1.recebeAumento e printá-la na sequência e não deu tbem... Não posso chamar o método calculaGanhoAnual de dentro do System.out..... ?

solução!

O comportamento do recebe aumento é diferente. Nele você passa o valor que o funcionário receberá como aumento. O método só faz acrescentar esse valor ao salário, mais nada. Veja que o tipo de retorno do método é void, ou seja, ele não devolve nada, apenas altera um atributo (salario):

class Funcionario {

    double salario;
    // seus outros atributos e métodos

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

Para fazer o que você quer, você dá um aumento ao funcionário e imprime o salário novamente. Veja:

class TestaFuncionario {
    public static void main(String[] args) {
        Funcionario f1 = new Funcionario();
        f1.nome = "Hugo"; f1.salario = 100;

        System.out.println("Nome :" + f1.nome);
        System.out.println("salario atual:" + f1.salario); 
        System.out.println("ganho anual:" + f1.calculaGanhoAnual());

        f1.recebeAumento(50);
        System.out.println("salario com aumento:" + f1.salario); 

    }
}

Vlw...mais uma vez obrigado!