Boa tarde,
Estou tentando aprender Java pela apostila fj-11 da Caelum, mas me deparei com a seguinte “divergência” no exercício 3 do capítulo 4.
public static void main(String[] args) {
Conta c1 = new Conta();
c1.titular = "Hugo";
c1.numero = 123;
c1.agencia = "45678-9";
c1.saldo = 50.0;
c1.dataDeAbertura = "04/06/2015";
System.out.println("Saldo atual: R$" + c1.saldo);
System.out.println("Rendimento mensal: R$" + c1.calculaRendimento());
System.out.println(c1.recuperaDadosParaImpressao());
Esse é o main que cria a conta com saldo de 50. O método recuperaDadosParaImpressão está assim:
String recuperaDadosParaImpressao() {
String dados = "Titular: " + this.titular;
dados += "\nNumero: " + this.numero;
dados += "\nAgencia: " + this.agencia;
dados += "\nData de abertura: " + this.dataDeAbertura;
dados += "\nSaldo: R$" + this.saldo;
dados += "\nRendimento: R$" + calculaRendimento();
return dados;
}
O saldo exibido quando eu chamo esse método deveria ser 50. Porém, a resposta no saldo é 5.
Saldo atual: R$50.0
Rendimento mensal: R$5.0
Titular: Hugo
Numero: 123
Agencia: 45678-9
Data de abertura: 04/06/2015
Saldo: R$5.0
Rendimento: R$0.5
Deixei passar algum detalhe que não consegui notar?
O código completo exibido não ajuda muito mas dá uma dica. Perceba que antes de chamar o seu método c1.recuperaDadosParaImpressao() o seu código main chama o método c1.calculaRendimento() compartilhe o código desse método para eu dar uma olhada, todavia acredito que é na chamada dele que seu saldo tenha sido trocado.
Esse é o método calculaRendimento:
double calculaRendimento() {
return this.saldo *= 0.1;
}
Mesmo quando eu tiro as duas linhas acima do metodo recuperaDadosParaImpressao (saldo e calculaRendimento), ele retorna o mesmo valor.
Você não pode atribuir no saldo o valor do rendimento, se não ambos terão os mesmos valores!
Seu método deveria estar assim:
double calculaRendimento() {
return this.saldo * 0.1;
}
1 curtida
Estranho, dê uma olhada com calma no que você está fazendo e implemente a mudança do @Jonathan_Medeiros.
Basicamente no seu método calculaRendimento você está reatribuindo o saldo a seu atributo saldo e obviamente irá substituí-lo essa linha
return this.saldo *= 0.1;
o java converte pra você em
return this.saldo = this.saldo * 0.1;
É apenas um sintaxe sugar (dê uma pesquisada sobre o termo usado para linguagens de programação) que a JVM lhe oferece para você digitar menos código.
Qualquer coisa avisa aí.
Abraços 
Adriano e @Jonathan_Medeiros, obrigada pelas respostas.
Testei e tive um retorno correto.
Eu sabia que o java (e outras linguagens) fazia essa conversão/atribuição com o uso do *=, mas nem cogitei que poderia ser isso.
De qualquer forma, muito obrigada. Reforcei o conceito e vou seguir o aprendizado 
Estou fazendo este exercício e fiz assim:
class Conta{
String titular;
int agencia;
String conta;
double saldo;
String dataAbertura;
public void saca(double valor){
this.saldo = this.saldo - valor;
System.out.println("\nValor sacado da conta: " + valor);
}
public void deposita(double valor){
this.saldo = this.saldo + valor;
System.out.println("\nValor depositado na conta: " + valor);
}
public double calculaRendimento(){
return this.saldo * 0.1;
}
public double saldoComRendimento(){
return this.saldo += this.saldo * 0.1;
}
public String recuperaDadosParaImpressao(){
String dados = "Titular: " + this.titular;
dados += "\n Agência: " + this.agencia;
dados += "\n Conta: " + this.conta;
dados += "\n Saldo: " + this.saldo;
dados += "\n Rendimento mensal: " + this.calculaRendimento();
dados += "\n Data de abertura: " + this.dataAbertura;
return dados;
}
}
class ContaTestes{
public static void main(String[] args){
Conta c = new Conta();
c.titular = "Pedro";
c.agencia = 1234;
c.conta = "45678-9";
c.saldo = 1000;
c.dataAbertura = "25/07/68";
System.out.println("\nSaldo atual: " + c.saldo);
c.deposita(100);
System.out.println("\nSaldo atual: " + c.saldo);
System.out.println("\nRendimento mensal: " + c.calculaRendimento());
System.out.println("\nSaldo atual com rendimento: " + c.saldoComRendimento());
c.saca(200);
System.out.println("\nSaldo atual: " + c.saldo);
System.out.println("\nDados da conta:\n" + c.recuperaDadosParaImpressao());
}
}
RESULTADO:
Saldo atual: 1000.0
Valor depositado na conta: 100.0
Saldo atual: 1100.0
Rendimento mensal: 110.0
Saldo atual com rendimento: 1210.0
Valor sacado da conta: 200.0
Saldo atual: 1010.0
Dados da conta:
Titular: Pedro
Agência: 1234
Conta: 45678-9
Saldo: 1010.0
Rendimento mensal: 101.0
Data de abertura: 25/07/68