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

Dúvida C#

Olá, gostaria de saber se essa besteria que eu fiz está certa, alguém pode me ajudar?

        public bool Saca(double valor)
        {
            cliente cliente = new cliente();

            if (cliente.idade < 18)
            {
                if (valor > 200.0 || this.saldo >= valor)
                {
                    MessageBox.Show("Você não pode realizar esse saque.");
                }
                else
                {
                    this.saldo -= valor;
                }

            }
            else
            {
                this.saldo -= valor;
            }
            return false;
        }
9 respostas

se ele for maior de idade, ele pode sacar mais do que tem de saldo ? precisa ver isso amigo, vlw flw

Sua aplicação faz o seguinte:

Se o cliente é MENOR de idade
    Se o valor do saque é maior que 200
    OU saldo é maior ou igual ao valor do saque
        -> ele não pode sacar
    Senão (valor do saque menor que 200 OU saldo MENOR que valor do saque)
        ele saca
Senão (maior de idade) 
    ele saca qualquer quantia

O retorno dessa função é sempre falso. Acredito que não seja esse o esperado.

Daniela, obrigado!

Não é o esperado mesmo...

isso é o que eu preciso fazer:

Agora altere o método Saca da classe Conta. Limite o valor do saque para R$ 200,00 caso o cliente seja menor de idade.

Lembre-se que ainda é necessário validar se o valor a ser sacado é menor ou igual ao saldo atual do cliente e é maior do que R$ 0,00.

solução!

Veja se resolve:

public bool Saca(double valor)
{
    //do jeito que você fez, aqui teria que setar um valor para a idade do cliente
    cliente cliente = new cliente();

    //se o cliente for menor de idade
    if (cliente.idade < 18)
    {
        //verifica se o valor é maior que 200 e não deixa
        if (valor > 200.0)
        {
            //retorna false, não deixa fazer o saque
            return false;
        }
        //senão, deixa
        else
        {
            //faz o saque e retorna true
            this.saldo -= valor;
            return true;
        }
    }
    else
    {
        //se o cliente não for menor de idade, faz a validação normal pra ver se tem saldo na conta
        if (this.saldo >= valor )
        {
            //faz o saque e retorna true
            this.saldo -= valor;
            return true;
        }
    }
}

Está bom sim Gabriel, só adicionei o "|| valor >= this.saldo)" pois se o valor for menor que R$200 mas também não tiver saldo disponível para sacar, também não podemos liberar, certo?

public bool Saca(double valor)
{
    //do jeito que você fez, aqui teria que setar um valor para a idade do cliente
    Cliente cliente = new Cliente();
    //se o cliente for menor de idade
    if (cliente.idade < 18)
    {
        //verifica se o valor é maior que 200 e não deixa
        if (valor > 200.0 || valor >= this.saldo)
        {
            //retorna false, não deixa fazer o saque
            return false;
        }
        //senão, deixa
        else
        {
            //faz o saque e retorna true
            this.saldo -= valor;
            return true;
        }
    }
    else
    {
        //se o cliente não for menor de idade, faz a validação normal pra ver se tem saldo na conta
        if (this.saldo >= valor )
        {
            //faz o saque e retorna true
            this.saldo -= valor;
            return true;
        }
    }
}

1 Abraço e obrigado!

Correto (:

Por favor, marque a questão como resolvida.

Abraço.

Fiquei com imensas dúvidas neste exercio e fiquei bastante tempo analisando, pois me parece que o codigo do exemplo da Alura poderia ser mais preciso, entao vim ver os coments.

o Gabriel disse que o codigo do Heinrich está correto, porém testei e obtenho o seguinte erro:

"not all code paths return a value"

eu já tinha tentado reescrever o codigo da Alura tirando o primeiro "return" e o seguinte else, porém recebi o mesmo erro...

Nehum dos codigos acima compila, mas em nenhum parte destes codigos dos comentarios há a codicao para SE o valorASerSacado < 0

Minha pergunta:

Temos que usar um return sempre que fazemos if ou else?? porque no exemplo da Alura há um return para cada if ou else e funciona, os exemplos daqui nao teem e nao funcionam...

Muito obrigado pela a ajuda :)

Oi Graziela!

Poste o seu código que não compila que te explico o que está acontecendo :)

Olá Gabriel, agradeco o apoio isto seria possivel por exemplo?porque que no caso do 1o cód do "Heinrich" da erro no MessageBox?? muitissimo obrigado :)

public virtual void Saca(double valor)
    {
       if (valor <= this.Saldo && valor > 0 && valor <= 200)
        {
            try
            {
                this.Titular.maiorDeIdade();
                this.Saldo -= valor;
            }
            catch (InvalidCastException e)
            {
                Console.Write("Erro"); ;
            }
        }
       else
        {
            this.saldo -= valor;
        }
}