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

resultado da transferência e saldo estão saindo errado

por algum motivo o qual eu não encontrei, o resultado anda saindo: "Saldo de Conta 1 : 150 Saldo de conta 2 : 225 O saldo atual da conta 1 é 50 e a conta 2 é 225

using System;

namespace bytebank
{
    class Program
    {
        static void Main(string[] args)
        {
            Conta contapri = new Conta();
            contapri.saldo = 150;
            Console.WriteLine("Saldo de Conta 1 : " + contapri.saldo);

            Conta contasec = new Conta();
            contasec.saldo = 75;
            contasec.saldo += contapri.saldo;
            Console.WriteLine("Saldo de conta 2 : " + contasec.saldo);

            contapri.transferir(100, contasec);
            Console.WriteLine(" o saldo atual é " + contapri.saldo + " e o outro é " + contasec.saldo);
            Console.ReadLine();
        }
    }
}





using System;
using System.Collections.Generic;
using System.Text;

namespace bytebank
{
    public class Conta
    {
        public string nome;
        public int agencia;
        public int conta;
        public double saldo;
        public void depositar(double valor)
        {
            valor += this.saldo;
        }

        public bool sacar(double valor) 
        {
            this.saldo -= valor;
            if (saldo < valor)
                return true;
            else return false;
        }

        public bool transferir(double valor, Conta contaDestino) 
        {
            if (valor > this.saldo)
            {
                return false;
            }

            this.saldo -= valor;
            contaDestino.depositar(valor);
            return true;
        }
    }


}

nota: os nomes pri e sec das contas é de primário e secundário, caso não tenha entendido

agradeço qualquer ajuda <(^ _ ^)>

3 respostas

Olá Matheus, tudo bem?

Foi apenas uma inversão no método Depositar. Veja:

 public void depositar(double valor)
        {
           this.saldo += valor ;
        }

Um ponto que eu gostaria de comentar é sobre a nomenclatura dos métodos que você está utilizando. Por questões de boa prática e convenção da linguagem, o nome de método deve iniciar com letra maiúscula.

Abraços e bons estudos :) !

solução!

Qual foi exatamente o comportamento inesperado? Faz um tempo que fiz esses exercícios mas vou descrever aqui como seu código chega em cada resultado, assim você pode entender como achei o erro.

O contapri começa com 150 e da um print de 150.

O contasec começa com 75 e logo na linha de baixo você mesmo falou para somar 75+150.

            contasec.saldo += contapri.saldo;

Ou seja: O valor da conta secundária é o valor atual dela + o valor da conta primária.

Depois você pede para transferir 100 da conta pri para a sec, a pri fica com 50 (150-100) mas a sec não muda o valor e continua com 225.

Isso é um sinal de que sua função/método "transferir(x, y)" ta fazendo algo errado.

        public bool transferir(double valor, Conta contaDestino)
        {
            this.saldo -= valor;
            contaDestino.depositar(valor);
            return true;
        }

Aqui tudo me parece correto, ali na 1º linha você pediu para subtrair o valor do saldo (100) e isso aconteceu na contapri.

Na 2º linha tem o código que deveria fazer a conta destino receber os 100 que desapareceram, é um outro método então vamos lá analisar esse tal depositar().

        public void depositar(double valor)
        {
            valor += this.saldo;
        }

Parece que achamos o problema.

Aqui você diz "valor (100) é igual a valor+valor da conta sec" e isso não faz sentido, pq o valor da transferência deveria ser modificado?

Escrevi isso no final desse código e o valor da transferencia passou de 100 para 325:

        Console.WriteLine("valor: " + valor);

Então o problema é que você inverteu a ordem, ao invés de adicionar o dinheiro na conta secundária, você adicionou a conta secundária ao valor da transferência.

Se trocar essa inversão ele resolve isso:

            this.saldo+=valor;

obrigado, eu realmente não tinha percebido a linha a mais e a inversão