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?
importjava.util.Scanner;publicclassContaimplementsCaixaEletronico{privateintnumConta;privateStringnome;privatefloatsaldo;Scannert=newScanner(System.in);publicConta(intnumConta,Stringnome){super();this.numConta=numConta;this.nome=nome;this.setSaldo(0);}publicintgetNumConta(){returnnumConta;}publicvoidsetNumConta(intnumConta){this.numConta=numConta;}publicStringgetNome(){returnnome;}publicvoidsetNome(Stringnome){this.nome=nome;}publicfloatgetSaldo(){returnsaldo;}publicvoidsetSaldo(floatsaldo){this.saldo=saldo;}@Overridepublicvoidmenu(){booleansair=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: ");intoperacao=t.nextInt();switch(operacao){case1:this.saldo();break;case2:System.out.print("Valor para o saque: R$ ");floatvalorSaque=t.nextFloat();this.sacar(valorSaque);break;case3:System.out.print("Valor para depósito: R$ ");floatvalorDeposito=t.nextFloat();this.depositar(valorDeposito);break;case4:System.out.print("Conta para transferencia: ");//Conta conta = t.next();System.out.print("Valor para transferencia: R$ ");floatvalorTransferencia=t.nextFloat();//this.transferir(conta, valorTransferencia);break;case0:sair=false;break;default:System.out.println("Operação inválida");}}while(sair);System.out.println("Até logo "+this.getNome());}@Overridepublicvoidsaldo(){System.out.println("Seu saldo é de R$ "+this.getSaldo());}@Overridepublicvoidsacar(floatvalor){if(this.getSaldo()<valor){System.out.println("Saldo insuficiente para a operação");}else{this.setSaldo(this.getSaldo()-valor);}}@Overridepublicvoiddepositar(floatvalor){this.setSaldo(valor);}@Overridepublicvoidtransferir(Contaconta,floatvalor){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
Sim tenho uma classe principal que instancia as contas c1 e c2 e chama o método c1.menu(). E também uma interface com os métodos que estão @Override.
F
f.java13
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?
D
darlan_machado
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).
Logo, o que eu disse acima, deve funcionar
F
f.java13
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.
D
darlan_machado
Cara, você que precisa fazer isso, eu já dei o caminho.
Como é tua classe Conta?
Como é o método que faz a transferência?
V
Vagner_Andrade
O programa vai ler conforme parâmetros que você passou no método. Da uma olhada:
publicclassPrograma{publicstaticvoidmain(String[]args){cc1.transferir(cp1,1000.0);//irá transferir 1000.0 da Conta cc1 para a Conta cp1.
F
f.java13
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
f.java13
Minha classe principal só tem 2 objetos (c1 e c2), e o c1 inicia o programa com c1.menu();
Só isso, o resto está tudo nessa classe que postei.
D
darlan_machado
@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.
V
Vagner_Andrade
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.
F
f.java13
Faz sentido… Quando chegar casa vou testar e dou um feedback, valeu Vagner
F
f.java13
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.
publicclassConta{StringnumConta;Stringnome;floatsaldo;publicConta(StringnumConta,Stringnome){super();this.numConta=numConta;this.nome=nome;this.setSaldo(0f);}publicStringgetNumConta(){returnnumConta;}publicvoidsetNumConta(StringnumConta){this.numConta=numConta;}publicStringgetNome(){returnnome;}publicvoidsetNome(Stringnome){this.nome=nome;}publicfloatgetSaldo(){returnsaldo;}publicvoidsetSaldo(floatsaldo){this.saldo=saldo;}}importjava.util.Scanner;publicclassInternetBanking{privateContaconta;Scannerentrada=newScanner(System.in);publicContagetConta(){returnconta;}publicvoidsetConta(Contaconta){this.conta=conta;}publicvoidmenu(Contaconta,Contac[]){booleansair=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: ");intoperacao=entrada.nextInt();switch(operacao){case1:this.saldo(conta);break;case2:System.out.print("Valor para o saque: R$ ");floatvalorSaque=entrada.nextFloat();this.sacar(conta,valorSaque);break;case3:System.out.print("Valor para depósito: R$ ");floatvalorDeposito=entrada.nextFloat();this.depositar(conta,valorDeposito);break;case4:ContacontaDestino=c[0];System.out.print("Conta para transferencia: ");StringnumContaDestino=entrada.next();for(intcont=0;cont<3;cont++){if(c[cont].numConta==numContaDestino){contaDestino=c[cont];}}System.out.print("Valor para transferencia: R$ ");floatvalorTransferencia=entrada.nextFloat();this.transferir(conta,contaDestino,valorTransferencia);break;case0:sair=false;break;default:System.out.println("Operação inválida");}}while(sair);System.out.println("Até logo "+conta.getNome());}publicvoidsaldo(Contaconta){System.out.println("Seu saldo é de R$ "+conta.getSaldo());}publicvoidsacar(Contaconta,floatvalor){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");}}publicvoiddepositar(Contaconta,floatvalor){conta.setSaldo(conta.getSaldo()+valor);System.out.println("Depositado com sucesso");}publicvoidtransferir(Contaconta,ContacontaDestino,floatvalor){this.sacar(conta,valor);this.depositar(contaDestino,valor);}}publicclassBanco{publicstaticvoidmain(String[]args){InternetBankingi=newInternetBanking();Contac[]=newConta[3];c[0]=newConta("00001","João");c[1]=newConta("00002","Maria");i.menu(c[0],c);}}
F
f.java13
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?
V
Vagner_Andrade
Você vai ter que criar uma array com o seu Objeto Contas.
Conta[]minhasContas;minhasContas=newConta[10]; //criou uma array do tipo Conta com 10 posições (0-9)
Depois, pra cada conta instanciada, você vai ter que popular sua array
Contac1=newConta();//Instanciei um objeto contaminhasContas[0]=c1;//Populei minha array "minhasContas" com a conta instanciada na posição 0.
Ai sim, você consegue percorrer pela contas e identificar com qual o Número da Conta vai bater.
EDIT: Você fez isso, né… AHAHA, agora que vi aqui. Mostra o erro que ta dando.
F
f.java13
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.
importjava.util.Scanner;publicclassConta{StringnumConta;Stringnome;floatsaldo;Scannerentrada=newScanner(System.in);publicConta(){super();System.out.print("Número da conta: ");this.numConta=entrada.next();System.out.print("Nome: ");this.nome=entrada.next();this.setSaldo(0f);}publicStringgetNumConta(){returnnumConta;}publicvoidsetNumConta(StringnumConta){this.numConta=numConta;}publicStringgetNome(){returnnome;}publicvoidsetNome(Stringnome){this.nome=nome;}publicfloatgetSaldo(){returnsaldo;}publicvoidsetSaldo(floatsaldo){this.saldo=saldo;}}importjava.util.Scanner;publicclassInternetBanking{privateContaconta;privateContacontaDestino;Scannerentrada=newScanner(System.in);publicContagetConta(){returnconta;}publicvoidsetConta(Contaconta){this.conta=conta;}publicvoidmenu(Contaconta,Contacontas[]){booleansair=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: ");intoperacao=entrada.nextInt();switch(operacao){case1:saldo(conta);break;case2:sacar(conta);break;case3:depositar(conta);break;case4:transferir(conta,contas);break;case0:sair=false;break;default:System.out.println("Operação inválida");}}while(sair);System.out.println("Até logo "+conta.getNome());}publicvoidsaldo(Contaconta){System.out.println("Seu saldo é de R$ "+conta.getSaldo());}publicvoidsacar(Contaconta){System.out.print("Valor para o saque: R$ ");floatvalor=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");}}publicvoiddepositar(Contaconta){System.out.print("Valor para depósito: R$ ");floatvalor=entrada.nextFloat();conta.setSaldo(conta.getSaldo()+valor);System.out.println("Depositado com sucesso");}publicvoidtransferir(Contaconta,Contacontas[]){System.out.print("Conta para transferência: ");StringnumContaDestino=entrada.next();for(intcont=0;cont<3;cont++){if(contas[cont].getNumConta().equals(numContaDestino)){contaDestino=contas[cont];break;}}System.out.print("Valor para transferência: ");floatvalor=entrada.nextFloat();conta.setSaldo(conta.getSaldo()-valor);contaDestino.setSaldo(contaDestino.getSaldo()+valor);}}importjava.util.Scanner;publicclassBanco{publicstaticvoidmain(String[]args){InternetBankingi=newInternetBanking();Contac[]=newConta[3];Scannerentrada=newScanner(System.in);booleansair=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: ");intoperacao;operacao=entrada.nextInt();switch(operacao){case1:System.out.print("Número da Conta: ");StringnumConta=entrada.next();for(intcont=0;cont<3;cont++){if(c[cont].getNumConta().equals(numConta)){i.menu(c[cont],c);break;}}break;case2:for(intcont=0;cont<3;cont++){if(c[cont]==null){c[cont]=newConta();break;}}break;case3:System.out.print("Número da conta que deseja fechar: ");StringnumContaFechar=entrada.next();for(intcont=0;cont<3;cont++){if(c[cont].getNumConta().equals(numContaFechar)){c[cont]=null;break;}}break;case0:sair=false;break;default:System.out.println("Operação inválida");}}while(sair);System.out.println("Saindo do sistema");}}