Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Uso do this invocando metodo.

package bytebank;

public class Conta {
    double saldo;
    int agencia;
    int numero;
    Cliente titular;

    public void deposita(double valor) {
        this.saldo += valor;    
    }
    public boolean saca(double valor) {
        if(this.saldo >= valor) {
            this.saldo -= valor;
            return true;
        }

            return false;
    }
    public boolean transfere(double valor, Conta destino) {
        if(this.saldo >= valor) {
            //saldo -= valor funciona mas pelo metodo saca retorna um erro
            this.saldo.saca(valor);
            destino.deposita(valor);
            return true;
        }
        return false;
    }

}

` Estou codificando o inicio do bytebank, já tenho a função deposita, saca e transfere. Para enviar o dinheiro para conta usando o parametro destino que referencia a um objeto do tipo conta, ao invés de usar destino+= valor; aproveitei o metodo deposita que já faz essa tarefa ficando destino.deposita(valor); Gostaria de fazer a mesma coisa com a subtração do dinheiro, tentei this.saldo.saca(50); mas retorna o erro Cannot invoke saca(int) on primitive type double, não entendi o por que no parametro do destino ter funcionado e dessa forma não

5 respostas

Boa noite, João! Como vai?

Vc poderia colar o código completo da classe em questão onde esse erro ocorreu? Assim ficará melhor de te ajudar!

Obs.: Quando for colar o código, utilize o botão "inserir código" e cole o código no lugar indicado para que ele seja postado com a formatação correta.

Boa noite Gabriel, editei com o código e um comentário na linha do erro. Obrigado pela resposta.

https://imgur.com/a/7Ld6UtQ (Imagem do erro)

João Lucas, boa tarde!

O que você pode fazer é parsear (converter), do tipo que você deseja, para double. Isso pode ser feito através do comando:

Double.parseDouble(saldo);

Assim garantimos que o valor passado será do tipo double

Espero ter ajudado e bons estudos!

O correto não seria:

 this.saca(50)

?

solução

Boa tarde João! Pelo que entendi, tem um pequeno erro no seu método transfere(). Conforme o Thiago comentou aqui, o correto seria "this.saca(50)", e não this.saldo.saca(50). Você está tentando invocar um método dentro de um atributo, e não um método para modificar o atributo. Segue o código correto no local do método transfere.

public boolean transfere(double valor, Conta destino) {
        if(this.saldo >= valor) {
            //saldo -= valor funciona mas pelo metodo saca retorna um erro
            this.saca(valor);
            destino.deposita(valor);
            return true;
        }
        return false;
    }

Não testei aqui mas acredito que vá funcionar.

Abraço!