[RESOLVIDO] Exercício da apostila fj-11

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

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

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