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

Um novo método: consegueTransferir

Olá, primeiro observem o código abaixo:

(...resto do código da classe Conta...)

    public boolean transferir(double valor, Conta destino) {
        if(this.saldo >= valor) {
            this.saldo -= valor;
            destino.depositar(valor);
            return true;
        } else {
            return false;
        }
    }

    public void consegueTransferir(double valor,Conta destino) {
        if(destino.transferir(valor, destino)) {
            System.out.println("\nConsegue transferir");
        } else {
            System.out.println("\nNão consegue transferir");
        }
    }

feito isso, minha pergunta é a seguinte: Há alguma forma de eu passar o valor "true" ou "false" para o método consegueTransferir sem ser da forma vista acima? forma: consegueTransferir(double valor,Conta destino)

Essa ideia de ver se eu Consigo transferir ainda vai, porque é uma ação válida, mas a minha ideia inicial era tirar os ifs do código TestaMetodo.java, visto em aula:

        if(conseguiuTransferir) {
            System.out.println("Transferência feita com sucesso");
        } else {
            System.out.println("Não há dinheiro suficiente na conta de origem");
        }

A ideia era criar o método conseguiuTransferir que chamaria o método transferir dentro dele para ter acesso aos returns e imprimir os prints.

ficaria tipo:

    conseguiuTransferir(){
        if(destino.transferir(valor, destino)) {
            System.out.println("\nConsegue transferir");
        } else {
            System.out.println("\nNão consegue transferir");
        }
}

mas ao fazê-lo só dava erro.

4 respostas

Olá, Michel, tente formatar a dúvida conforme abaixo para ficar mais fácil de entender.

(...resto do código da classe Conta...)

public boolean transferir(double valor, Conta destino) {
    if(this.saldo >= valor) {
         this.saldo -= valor;
        destino.depositar(valor);
        return true; 
    } 
    else {
        return false;
    }
}
public void consegueTransferir(double valor,Conta destino) { 
    if(destino.transferir(valor, destino)) {
        System.out.println("\nConsegue transferir");
    }
     else{
        System.out.println("\nNão consegue transferir");
    }
}

Feito isso, minha pergunta é a seguinte: Há alguma forma de eu passar o valor true ou false para o método consegueTransferir sem ser da forma vista acima? forma: consegueTransferir(double valor,Conta destino)

Essa ideia de ver se eu Consigo transferir ainda vai, porque é uma ação válida, mas a minha ideia inicial era tirar os ifs do código TestaMetodo.java, visto em aula:

if(conseguiuTransferir) {
    System.out.println("Transferência feita com sucesso");
}
else{
    System.out.println("Não há dinheiro suficiente na conta de origem");
}

A ideia era criar o método conseguiuTransferir que chamaria o método transferir dentro dele para ter acesso aos returns e imprimir os prints.

ficaria tipo:

conseguiuTransferir(){ 
    if(destino.transferir(valor, destino)) {
        System.out.println("\nConsegue transferir");
    } 
    else{
        System.out.println("\nNão consegue transferir");
    }
}

Quanto a sua dúvida, se entendi bem você pode alterar o método consegueTransferir para booean também

public boolean consegueTransferir(double valor,Conta destino) { 
    if(destino.transferir(valor, destino)) {
        System.out.println("\nConsegue transferir");
        return true;
    }
     else{
        System.out.println("\nNão consegue transferir");
        return false;
    }
}
solução!

Oi Michel

Entendi seu interesse, mas o ideal é esse if(conseguiuTransferir) ficar fora da classe Conta. Afinal, se a conta conseguiu transferir ou nao, quem vai tomar uma atitude em relacao a isso vai ser a classe que chamou esse metodo, e nao a propria Conta.

Imagine que voce chega a um caixa eletronico e tenta fazer uma transferencia e nao deu certo. Quem vai tomar uma atitude a respeito disso? Quem pediu pra transferir ou a classe Conta? É uma questao de separacao de responsabilidades, que nunca tem uma resposta exata (depende do contexto) e que vamos ganhando mais traquejo conforme mais praticamos a orientacao a objetos.

Sobre a sua questao em si:

conseguiuTransferir(){ 
    if(destino.transferir(valor, destino)) {
        System.out.println("\nConsegue transferir");
    } 
    else{
        System.out.println("\nNão consegue transferir");
    }
}

Esse codigo nao compila por dois motivos:

  • é obrigatorio no java declarar o retorno. Se esse metodo nao retorna nada, precisa estar escrito void na frente
  • as variaveis valor e destino nao existem! elas nao sao atributos e nem sao parametros do metodo (ja que voce o declarou com abre e fecha parenteses).

Para compilar, a solucao do Thiago funciona muito bem. Eu só vou deixar pra voce refletir se realmente precisa desse metodo ai, que apenas vai fazer a transferencia e printar algo na tela. De resto, ele faz o mesmo que o transfere.

Olá Paulo e Thiago, desde já agradeço pelo feedback de vc's.

Bom, realmente o método que o Thiago criou funciona, eu até já tinha feito dessa maneira antes de fazer o questionamento aqui.

O que eu queria fazer com

conseguiuTransferir( [sem passar nenhum parâmetro] )

era chamar, dentro do 'if' que iria nela, o método

transferir(double valor, Conta destino)

porque ele retornaria 'true' ou 'false'.

A ideia em si era só conseguir pegar esse valor booleano que estava sendo retornado do outro método e, assim, poder entrar, ou não, dentro do if do método em questão.