Bom dia, O metodo fazerSaque dentro da classe SistemaBancario não saca o valor passado no parametro. O metodo fazerSaque chama o metodo saca() da classe ContaCorrente, mas nao efetua o saque.
packageSISTEMABANCARIO;publicclassContaCorrenteextendsConta{//private double limiteCredito;//private double taxaJuros;publicContaCorrente(intnumeroConta,doublesaldo,StringtipoConta){super(numeroConta,saldo,tipoConta);}publicContaCorrente(){}publicvoidgerarTaxa(){super.saldo=super.saldo-15.99;}@Overridepublicvoiddeposita(doublevalor){super.saldo=super.saldo+valor;}@Overridepublicvoidsaca(doublequantidade){doublenovoSaldo=super.saldo-quantidade;super.saldo=novoSaldo;}@OverridepublicStringtoString(){return"\nNumero da Conta: "+super.numeroConta+"\nSaldo: "+super.saldo+"\nTipo de Conta: "+super.tipoConta+"\n*************************************\n";}publicClientegetCliente(){returncliente;}publicvoidsetCliente(Clientecliente){this.cliente=cliente;}}
Classe SistemaBancario com o metodo fazerSaque
packageSISTEMABANCARIO;publicclassSistemaBancario{publicvoidfazerSaque(Clientecliente,doublevalor){// COMO EU FAÇO PARA QUE O SAQUE DESTE METODOContaCorrentec=newContaCorrente();//c.saca(valor);c.saca(valor);System.out.println("Saque efetuado com sucesso!");}}
Testei seu código e o saque foi efetuado corretamente.
Eu só modifiquei um pouco a classe SistemaBancario, adicionei um println(c) para ver os dados da conta e um método main() para poder testar. Ficou assim:
packageSISTEMABANCARIO;publicclassSistemaBancario{publicvoidfazerSaque(Clientecliente,doublevalor){// COMO EU FAÇO PARA QUE O SAQUE DESTE METODOContaCorrentec=newContaCorrente();c.saca(valor);System.out.println(c);System.out.println("Saque efetuado com sucesso!");}publicstaticvoidmain(String[]args){newSistemaBancario().fazerSaque(null,10);}}
E no console, mostrou que o saldo é -10, como esperado, já que o saldo era 0.0.
Me explica melhor o problema que vc encontrou.
M
manoelfariasdasilvas
Tinha faltado enviar o main, por isso vc nao viu pq nao sacou.
Veja no meu main ai porque nao sacou. Quando eu coloco sis.fazerSaque(3), não é sacado
sis.fazerSaque(3);// aqui nao saca
Segue a Classe main TesteSistema.java, veja observe
packageSISTEMABANCARIO;publicclassTesteSistema{publicstaticvoidmain(String[]args){Clientec1=newCliente();c1.setNome("Maria");c1.setEndereco("Rua sao João");c1.setTelefone(3214566);c1.setLimiteCredito(10000);c1.setId(1);Clientec2=newCliente();c2.setNome("Jose");c2.setEndereco("Rua sao Lucas");c2.setTelefone(9223);c2.setLimiteCredito(20000);c2.setId(2);Clientec3=newCliente();c3.setNome("Carlos");c3.setEndereco("Bairro cidade de Deus");c3.setTelefone(12928);c3.setLimiteCredito(450000);c3.setId(3);Clientec4=newCliente();c4.setNome("Beijamin");c4.setEndereco("Centro João Pessoa");c4.setTelefone(837780);c4.setLimiteCredito(2500000);c4.setId(4);ContacontaCorrente=newContaCorrente(3457,8,"** Conta corrente **");ContacontaPoupanca=newContaPoupanca(7878,5,"** Conta Poupança**");SistemaBancariosis=newSistemaBancario();sis.cadastrarCliente(c1,contaCorrente);//sis.cadastrarCliente(c2, contaPoupanca);//sis.cadastrarCliente(c3, contaPoupanca);//sis.cadastrarCliente(c4, contaCorrente);System.out.println(sis.getLista());sis.fazerSaque(3);// aqui nao saca//contaCorrente.saca(4);System.out.println(contaCorrente.getSaldo());//sis.cadastrarCliente(c2, contaPoupanca);System.out.println("\n");//System.out.println(sis.getClientes()); // nao imprime a lista de clientes//System.out.print(c2.getNome());//contaCorrente.imprimirInfo();//contaCorrente.imprimirInfo();//System.out.print(sis.getClientes());//System.out.println(sis.toString());}}
M
manoelfariasdasilvas
O metodo fazerSaque ficou assim classe completa
packageSISTEMABANCARIO;importjava.util.ArrayList;importjava.util.List;publicclassSistemaBancario{List<Conta>contas;List<Cliente>clientes;List<ContaPoupanca>contaPoupancas;List<ContaCorrente>contaCorrentes;//private Cliente cliente;privateList<Object>lista=newArrayList<Object>();privateContaCorrentec;publicSistemaBancario(){this.clientes=newArrayList<Cliente>();this.contas=newArrayList<Conta>();this.contaCorrentes=newArrayList<ContaCorrente>();this.contas=newArrayList<Conta>();this.contaPoupancas=newArrayList<ContaPoupanca>();c=newContaCorrente();}publicvoidremoverConta(Contaconta){this.contas.remove(conta);}publicvoidcadastrarCliente(Clientecliente,Contaconta){this.lista.add(cliente);this.lista.add(conta);//this.clientes.add(cliente);//this.contas.add(conta);}publicvoidfazerSaque(doublevalor){// COMO EU FAÇO PARA QUE O CLIENTE SAQUE DESTE METODOc.saca(valor);}publicList<Cliente>getClientes(){for(Clientec:clientes){c.toString();}returnclientes;}publicList<ContaCorrente>getContaCorrentes(){returncontaCorrentes;}publicList<ContaPoupanca>getContaPoupancas(){returncontaPoupancas;}publicList<Object>getLista(){//System.out.print(lista.get(1));//System.out.print(lista.get(0));//System.out.print(lista.get(0));//for(Object ob: lista){// System.out.print(lista.get(0));//System.out.print(c);//}returnlista;// retorna o toString da lista(Cliente e Conta)}}
W
wldomiciano1 like
No constructor da classe SistemaBancario vc cria uma nova instância de ContaCorrente e é desta instância que o saque é realizado.
No seu métodos main, vc tem esta linha:
sis.cadastrarCliente(c1,contaCorrente);
E acredito que sua intenção é fazer o saque da consta cadastrada neste trecho, correto? Isso nunca acontece no seu código, vc vai ter que alterar sua lógica.
E se o método fazerSaque() tiver um outro parâmetro numeroDaConta e aí vc faz uma busca no seu array de contas para ver se o tal número existe. Se existir, vc faz o saque dela.
H
hugokotsubo1 like
Não diretamente relacionado, mas fica a sugestão de criar um construtor que receba todos os dados de uma vez (que nem vc fez com a Conta).
E não é só pra “digitar menos”, tem a questão semântica também. Por exemplo, se vc faz new Cliente() cria um cliente sem nome, endereço, id, etc. Faz sentido existir um cliente sem nenhuma dessas informações? Se não fizer, melhor deixar apenas o construtor que recebe todos os dados e só cria o cliente se tudo estiver válido.
M
manoelfariasdasilvas
Não amigo, a minha intenção é fazer o saque deste trecho de codigo abaixo
ContacontaCorrente=newContaCorrente(3457,8,"** Conta corrente **");
Mas o saque não é realizado com o metodo fazerSaque() dentro da classe SistemaBancario . Qual a sugestão que voce daria para esta questao? ficar sacando direto da conta corrente ou poupança através do metodo saca(double quantidade), dessa forma quando eu chamo no main este metodo saca normalmente assim contaCorrente.saca)// Aqui saca.
M
Solucao aceita
manoelfariasdasilvas1 like
Consegui amigo, nao estava sacando porque nao estava fazendo referencia a conta, entao tinha que passar a conta como parametro e o valor a ser sacado da conta, ficou assim o metodo fazerSaque(Conta conta, double quantia) no main ficou assim sis.fazerSaque(contaCorrente,3); // agora saca Gratidão pelas sugestões e respostas