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

Como eu pego o nome de um objeto usando o Scanner?

Eu estou fazendo o curso de java e me deparei com uma dúvida. No curso, nós criamos uma conta para um banco e um metodo que faz uma transferencia...

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

Minha duvida é a seguinte... e se eu quiser que o usuário interaja com o código, pedindo para ele digitar a conta destino e o valor?
O valor eu até entendi como posso pegar com o Scanner, mas e a Conta destino? como eu faço para ler ela? 

Teria como fazer desse jeito? está dando erro aqui.

              Scanner pegaconta =new Scanner(System.in);

             Conta teste = pegaconta.next();
4 respostas

Pelo que entendi seria tipo esse exemplo abaixo, toda vez que você chama o scanner.next(), ele captura as informações digitadas, então para capturar outro valor, é basicamente chamar o scanner.next(), atribuindo para outra variavel.

public static void main(String[] args) {
    Scanner scanner =new Scanner(System.in);
    System.out.println("Digite a conta de destino: ");
    String conta = scanner.next();
    System.out.println("Digite o valor");
    String valor = scanner.next();        
    System.out.println(String.join(" ", "Transferindo o valor de", valor, "para a conta", conta));
}

Boa tarde Ricardo, muito obrigado por me responder! Mas ainda não é isso que eu quero. O problema não é imprimir o valor da variavel pega pelo Scanner e sim passá-los como parametro.

De acordo com o seu código, oque eu queria saber se da para fazer, ficaria assim:

public static void main(String[] args) {

    Scanner scanner =new Scanner(System.in);
    System.out.println("Digite a conta de destino: ");
    Conta conta = scanner.next();
    //String conta = scanner.next();
    // repare que aqui não é do tipo String que eu quero e sim um objeto do tipo "Conta"
    }
Para tentar deixar mais claro, eu gostaria de saber se da para pegar pelo Scanner as variaveis contaQueTransfere e ContaDestino que são do "tipo Conta" e passá-los para essa função abaixo:
contaQueTransfere.Transfere(double valor, ContaDestino)
solução!

Então, o scanner você captura valor por valor, então para fazer o que você quer utilizando o scanner, seria necessário usar o scanner para capturar os valores e depois chamar o construtor, que eu saiba não é possivel vincular a atribuição do objeto Conta direto com o scanner igual você está tentando fazer.

Exemplo classe Conta

public class Conta{
    private String agencia;
    private String conta;

    public Conta() {}

    public Conta(String agencia, String conta) {
        super();
        this.agencia = agencia;
        this.conta = conta;
    }

    public String getAgencia() {
        return agencia;
    }

    public void setAgencia(String agencia) {
        this.agencia = agencia;
    }

    public String getConta() {
        return conta;
    }

    public void setConta(String conta) {
        this.conta = conta;
    }            
}

Exemplo usando scanner para pegar cada atributo da conta e da função transfere

public static void main(String[] args) {
        Scanner scanner =new Scanner(System.in);
        System.out.println("Digite a conta de destino: ");
        String conta = scanner.next();
        System.out.println("Digite a agencia da conta de destino: ");
        String agencia = scanner.next();
        System.out.println("Digite o valor");
        double valor = scanner.nextDouble();                
        contaQueTransfere.Transfere( valor, new Conta(conta, agencia))
    }

Teria que ser feito algo parecido com esse exemplo para capturar todos os campos da classe Conta e depois chamar o construtor para ter o objeto montado, para chamar essa função transfere.

Entendi, que pega que não da para fazer daquele jeito, mas mesmo assim muito obrigado pela ajuda!!!