Gostaria de saber como passo um objeto para o método transferencia do meu código, esse objeto seria a conta que vou fazer a transferencia, notem que deixei como comentário no meu código para eu conseguir usar o resto do programa. Está no bloco do switch case 4.
Na verdade meu sonho de consumo era eu poder passar o número da conta destino como parametro, poderiam me ajudar nessas 2 formas, tanto passando a classe como passando um numero de conta que faça o metodo entender a que objeto seria esse numero de conta?
import java.util.Scanner;
public class Conta implements CaixaEletronico {
private int numConta;
private String nome;
private float saldo;
Scanner t = new Scanner (System.in);
public Conta(int numConta, String nome) {
super();
this.numConta = numConta;
this.nome = nome;
this.setSaldo(0);
}
public int getNumConta() {
return numConta;
}
public void setNumConta(int numConta) {
this.numConta = numConta;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public float getSaldo() {
return saldo;
}
public void setSaldo(float saldo) {
this.saldo = saldo;
}
@Override
public void menu() {
boolean sair = true;
do {
System.out.println("=======================================================");
System.out.println(" C A I X A E L E T R O N I C O ");
System.out.println("=======================================================");
System.out.println("Bem vindo " + this.getNome());
System.out.println("=======================================================");
System.out.println("[1] Saldo");
System.out.println("[2] Sacar");
System.out.println("[3] Depositar");
System.out.println("[4] Transferir");
System.out.println("[0] Sair");
System.out.println("=======================================================");
System.out.print("Operação: ");
int operacao = t.nextInt();
switch (operacao) {
case 1:
this.saldo();
break;
case 2:
System.out.print("Valor para o saque: R$ ");
float valorSaque = t.nextFloat();
this.sacar(valorSaque);
break;
case 3:
System.out.print("Valor para depósito: R$ ");
float valorDeposito = t.nextFloat();
this.depositar(valorDeposito);
break;
case 4:
System.out.print("Conta para transferencia: ");
//Conta conta = t.next();
System.out.print("Valor para transferencia: R$ ");
float valorTransferencia = t.nextFloat();
//this.transferir(conta, valorTransferencia);
break;
case 0:
sair = false;
break;
default:
System.out.println("Operação inválida");
}
} while (sair);
System.out.println("Até logo " + this.getNome());
}
@Override
public void saldo() {
System.out.println("Seu saldo é de R$ " + this.getSaldo());
}
@Override
public void sacar(float valor) {
if (this.getSaldo() < valor) {
System.out.println("Saldo insuficiente para a operação");
} else {
this.setSaldo(this.getSaldo() - valor);
}
}
@Override
public void depositar(float valor) {
this.setSaldo(valor);
}
@Override
public void transferir(Conta conta, float valor) {
if (this.getSaldo() < valor) {
System.out.println("Saldo insuficiente para a operação");
} else {
this.setSaldo(this.getSaldo() - valor);
conta.setSaldo(conta.getSaldo() + valor);
}
}
}
O método transferir espera uma conta e qual o valor a ser transferido.
Logo, você vai pegar o objeto conta que já deve possuir e o valor dessa transferência e invocar o método:
Mas, isso só vai funcionar se você descomentar as linhas onde lê a conta, mudar para receber um número e depois instanciar a tal conta
Conta conta = new Conta();
int numeroConta = Integer.parseInt(sc.nextLine());
conta.setNumero(numeroConta);
transferir(conta, valorTransferencia);
O meu maior problema é passar esse objeto via Scanner, não quero apenas colocar tipo c1.transfere(c2, 100). Quero ter um campo com Scanner para passar para qual objeto, tipo: Conta para transferir: c2. Porém com Scanner eu preciso passar como next(), mas qual seria o tipo da classe?
Isso ocorre pelo simples fato de que você JAMAIS terá algo assim:
Pois Conta é uma classe que você criou, totalmente desconhecida para os objetos Scanner.
Conta é uma classe que possui atributos, como o número da conta e o seu respectivo saldo. Estes sim, podem ser lidos pelo Scanner, por serem conhecidos por ele (String, int, float, double, etc).
Ok, mas como eu faria um algoritmo que lê o número da conta destino e a partir daí eu possa mexer no saldo dessa conta destino? Não faço a menor ideia de como fazer isso.
Olá Vagner, se vc ver, meu programa é interativo, eu não coloco c1.transferir(c2, 100);
Eu uso a classe scanner pra fazer as operações, não justamente como na classe scanner falar para transferir para c2.
@f.java13 você realmente quer trabalhar com desenvolvimento? Quer ser um programador?
Se sim, então comece a pensar fora da caixa, comece a entender que, na maioria das vezes, você encontrará exemplos totalmente diferentes do que você precisa e terá que adequar à tua realidade.
É isso que diferencia um programador medíocre do programador bom.
Quando você escolher o “case 4”, você tem que chamar o método transferir(). No método transferir, você vai pedir pra passar o argumento, de por exemplo, numeroConta. Depois vai fazer um “for” numa array de conta até achar a conta compatível com o numero passado e realizar a operação.
Resolvi reescrever o código, agora fiz uma classe Conta e outra InternetBanking, então eu passo a Conta para o InternetBanking, porém está dando erro no meu for dentro do método menu(), case 4. No eclipse não está mostrando nenhum erro, mas ao tentar fazer a transferencia aparece uma mensagem de erro. Estou passando um array do objeto Conta para o método menu(). Segue código completo.
public class Conta {
String numConta;
String nome;
float saldo;
public Conta(String numConta, String nome) {
super();
this.numConta = numConta;
this.nome = nome;
this.setSaldo(0f);
}
public String getNumConta() {
return numConta;
}
public void setNumConta(String numConta) {
this.numConta = numConta;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public float getSaldo() {
return saldo;
}
public void setSaldo(float saldo) {
this.saldo = saldo;
}
}
import java.util.Scanner;
public class InternetBanking {
private Conta conta;
Scanner entrada = new Scanner (System.in);
public Conta getConta() {
return conta;
}
public void setConta(Conta conta) {
this.conta = conta;
}
public void menu(Conta conta, Conta c[]) {
boolean sair = true;
do {
System.out.println("=======================================================");
System.out.println(" C A I X A E L E T R O N I C O ");
System.out.println("=======================================================");
System.out.println("Bem vindo " + conta.getNome());
System.out.println("=======================================================");
System.out.println("[1] Saldo");
System.out.println("[2] Sacar");
System.out.println("[3] Depositar");
System.out.println("[4] Transferir");
System.out.println("[0] Sair");
System.out.println("=======================================================");
System.out.print("Operação: ");
int operacao = entrada.nextInt();
switch (operacao) {
case 1:
this.saldo(conta);
break;
case 2:
System.out.print("Valor para o saque: R$ ");
float valorSaque = entrada.nextFloat();
this.sacar(conta, valorSaque);
break;
case 3:
System.out.print("Valor para depósito: R$ ");
float valorDeposito = entrada.nextFloat();
this.depositar(conta, valorDeposito);
break;
case 4:
Conta contaDestino = c[0];
System.out.print("Conta para transferencia: ");
String numContaDestino = entrada.next();
for (int cont = 0 ; cont < 3 ; cont++) {
if (c[cont].numConta == numContaDestino) {
contaDestino = c[cont];
}
}
System.out.print("Valor para transferencia: R$ ");
float valorTransferencia = entrada.nextFloat();
this.transferir(conta, contaDestino, valorTransferencia);
break;
case 0:
sair = false;
break;
default:
System.out.println("Operação inválida");
}
} while (sair);
System.out.println("Até logo " + conta.getNome());
}
public void saldo(Conta conta) {
System.out.println("Seu saldo é de R$ " + conta.getSaldo());
}
public void sacar(Conta conta, float valor) {
if (conta.getSaldo() < valor) {
System.out.println("Saldo insuficiente para a operação");
} else {
conta.setSaldo(conta.getSaldo() - valor);
System.out.println("Saque realizado com sucesso");
}
}
public void depositar(Conta conta, float valor) {
conta.setSaldo(conta.getSaldo() + valor);
System.out.println("Depositado com sucesso");
}
public void transferir(Conta conta, Conta contaDestino, float valor) {
this.sacar(conta, valor);
this.depositar(contaDestino, valor);
}
}
public class Banco {
public static void main(String[] args) {
InternetBanking i = new InternetBanking();
Conta c[] = new Conta[3];
c[0] = new Conta("00001", "João");
c[1] = new Conta("00002", "Maria");
i.menu(c[0], c);
}
}
Vejo o método principal apenas como um método para iniciar o programa, ou nele eu programar algo que vá direcionando o programa para as classes e métodos. Não acho boa prática programar o meu menu na classe principal, lá provavelmente eu conseguiria interagir melhor com os objetos. Ou será que lá seria o melhor lugar para programar o menu?
Cara, to bem contente, consegui evoluir bem meu programa, já consigo transferir e até criar e excluir conta, ainda tem muita coisa pra melhorar como evitar que a conta com saldo seja excluida, ou então criar uma conta com mesmo número, mas até aqui to satisfeito, as poucos vou melhorando.
Infelizmente precisei criar muita coisa na classe principal pra poder acessar as outras classes, mas tudo bem, talvez eu deveria criar uma classe sistema e todo esse codigo da classe principal ficar lá, e de lá eu direciono para as outras classes.
Segue meu código.
import java.util.Scanner;
public class Conta {
String numConta;
String nome;
float saldo;
Scanner entrada = new Scanner (System.in);
public Conta() {
super();
System.out.print("Número da conta: ");
this.numConta = entrada.next();
System.out.print("Nome: ");
this.nome = entrada.next();
this.setSaldo(0f);
}
public String getNumConta() {
return numConta;
}
public void setNumConta(String numConta) {
this.numConta = numConta;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public float getSaldo() {
return saldo;
}
public void setSaldo(float saldo) {
this.saldo = saldo;
}
}
import java.util.Scanner;
public class InternetBanking {
private Conta conta;
private Conta contaDestino;
Scanner entrada = new Scanner (System.in);
public Conta getConta() {
return conta;
}
public void setConta(Conta conta) {
this.conta = conta;
}
public void menu(Conta conta, Conta contas[]) {
boolean sair = true;
do {
System.out.println("=======================================================");
System.out.println(" I N T E R N E T B A N K I N G ");
System.out.println("=======================================================");
System.out.println("Bem vindo " + conta.getNome());
System.out.println("=======================================================");
System.out.println("[1] Saldo");
System.out.println("[2] Sacar");
System.out.println("[3] Depositar");
System.out.println("[4] Transferir");
System.out.println("[0] Sair");
System.out.println("=======================================================");
System.out.print("Operação: ");
int operacao = entrada.nextInt();
switch (operacao) {
case 1:
saldo(conta);
break;
case 2:
sacar(conta);
break;
case 3:
depositar(conta);
break;
case 4:
transferir(conta, contas);
break;
case 0:
sair = false;
break;
default:
System.out.println("Operação inválida");
}
} while (sair);
System.out.println("Até logo " + conta.getNome());
}
public void saldo(Conta conta) {
System.out.println("Seu saldo é de R$ " + conta.getSaldo());
}
public void sacar(Conta conta) {
System.out.print("Valor para o saque: R$ ");
float valor = entrada.nextFloat();
if (conta.getSaldo() < valor) {
System.out.println("Saldo insuficiente para a operação");
} else {
conta.setSaldo(conta.getSaldo() - valor);
System.out.println("Saque realizado com sucesso");
}
}
public void depositar(Conta conta) {
System.out.print("Valor para depósito: R$ ");
float valor = entrada.nextFloat();
conta.setSaldo(conta.getSaldo() + valor);
System.out.println("Depositado com sucesso");
}
public void transferir(Conta conta, Conta contas[]) {
System.out.print("Conta para transferência: ");
String numContaDestino = entrada.next();
for (int cont = 0 ; cont < 3 ; cont++) {
if (contas[cont].getNumConta().equals(numContaDestino)) {
contaDestino = contas[cont];
break;
}
}
System.out.print("Valor para transferência: ");
float valor = entrada.nextFloat();
conta.setSaldo(conta.getSaldo() - valor);
contaDestino.setSaldo(contaDestino.getSaldo() + valor);
}
}
import java.util.Scanner;
public class Banco {
public static void main(String[] args) {
InternetBanking i = new InternetBanking();
Conta c[] = new Conta[3];
Scanner entrada = new Scanner (System.in);
boolean sair = true;
do {
System.out.println("=======================================================");
System.out.println(" S I S T E M A B A N C A R I O ");
System.out.println("=======================================================");
System.out.println("[1] Internet Banking");
System.out.println("[2] Abrir Conta");
System.out.println("[3] Fechar Conta");
System.out.println("[0] Sair");
System.out.println("=======================================================");
System.out.print("Operação: ");
int operacao;
operacao = entrada.nextInt();
switch (operacao) {
case 1:
System.out.print("Número da Conta: ");
String numConta = entrada.next();
for (int cont = 0 ; cont < 3 ; cont++) {
if (c[cont].getNumConta().equals(numConta)) {
i.menu(c[cont], c);
break;
}
}
break;
case 2:
for (int cont = 0 ; cont < 3 ; cont++) {
if (c[cont] == null) {
c[cont] = new Conta();
break;
}
}
break;
case 3:
System.out.print("Número da conta que deseja fechar: ");
String numContaFechar = entrada.next();
for (int cont = 0 ; cont < 3 ; cont++) {
if (c[cont].getNumConta().equals(numContaFechar)) {
c[cont] = null;
break;
}
}
break;
case 0:
sair = false;
break;
default:
System.out.println("Operação inválida");
}
} while (sair);
System.out.println("Saindo do sistema");
}
}