dark_wolk 0 Denunciar post Postado Dezembro 14, 2008 aew galera eh o seguinte, tenho q fazer um programa q e simule um banco, o programa ta pronto, so q na ora de cadstrar uma nova conta, eu naum qro mandar o usuario entrar com um numero pra conta. Eu qria que seguisse uma sequencia tipo o primeiro 1, o segundo 2 e assim por diante, eu tentei fazer isso colocando o atributo numero, da classe Conta estático e no construtor da conta, mandando incrementar em 1 o numero, so q na ora q você cadastrad mais de uma conta, ele coloca para as duas contas o mesmo numero, como se todos recebem o mesmo numero, e na prox conta criada incrementasse tdos, se alguem puder me ajudar ai esta a classe principal e a aplicacao que roda as classes... flws Classe Conta: import java.util.Date; import java.text.SimpleDateFormat; public class Conta{ protected int numero; protected double saldo; protected String titular; protected Date hoje = new Date(); String formato = "dd/MM/yyyy"; SimpleDateFormat formatter = new SimpleDateFormat(formato); protected String data = formatter.format(hoje); public Conta(int numero, String titular){ this.numero = numero; this.saldo = 0; this.titular = titular; this.data = data; } public double obterSaldo(){ return this.saldo; } } Aplicacao Conta: import java.text.SimpleDateFormat; import java.util.*; public class AplicacaoConta{ static int op; static Scanner sc = new Scanner(System.in); static ArrayList <ContaPoupanca> contaspoupanca = new ArrayList<ContaPoupanca>(); static ArrayList <ContaCorrente> contascorrente = new ArrayList<ContaCorrente>(); private static void mostraData(){ Date hoje = new Date(); String formato = "E dd/MM/yyyy HH : mm"; SimpleDateFormat formatter = new SimpleDateFormat(formato); System.out.println("\n\t\tHoje eh: "+ formatter.format(hoje)); } private static void menuCorrente(){ mostraData(); String menuCorrente = "\n\t\t1 - Criar conta corrente\n\t\t2 - Creditar\n\t\t3 - Debitar\n\t\t4 - Saldo\n\t\t5 - Listar contas corrente\n\t\t6 - Excluir conta\n\t\t0 - Voltar\n"; System.out.println(menuCorrente); System.out.print("\n\t\tEntre com a opcao: "); int opcao = sc.nextInt(); switch(opcao){ case 1: System.out.print("\t\tNovo titular: "); String nome = sc.next(); System.out.print("\t\tNumero da conta: "); int num = sc.nextInt(); contascorrente.add(new ContaCorrente(num, nome)); System.out.println("\t\tOperacao realizada de com sucesso !"); break; case 2: System.out.print("\t\tNumero da conta: "); num = sc.nextInt(); System.out.print("\t\tQuantia: "); double quantia = sc.nextDouble(); for(ContaCorrente c: contascorrente){ if(num == c.numero){ c.creditar(quantia); System.out.println("\t\tOperacao realizada com sucesso !"); } } break; case 3: System.out.print("\t\tNumero da conta: "); num = sc.nextInt(); for(ContaCorrente c: contascorrente){ if(num == c.numero){ System.out.print("\t\tQuantia: "); quantia = sc.nextDouble(); c.debitar(quantia); } } break; case 4: System.out.print("\t\tNumero da conta: "); num = sc.nextInt(); for(ContaCorrente c: contascorrente){ if(num == c.numero) System.out.println("\t\tSeu saldo eh de: " + c.obterSaldo()); } break; case 5: System.out.println("\t\t============== CONTAS CORRENTES CADASTRADAS ============"); for(ContaCorrente c: contascorrente) System.out.print("\t\tNome: " + c.titular + "\n\t\tNumero: " + c.numero + "\n\t\tData: "+ c.data + "\n\t\t-----------------\n"); break; case 6: System.out.print("\t\tEntre com o numero da sua conta: "); num = sc.nextInt(); for(ContaCorrente c: contascorrente){ if(c.numero == num) contascorrente.remove(c); } break; case 0: menuPrincipal(); break; default:System.out.println("\t\tOperacao invalida !"); } } private static void menuPoupanca(){ mostraData(); String menuPoupanca = "\n\t\t1 - Criar conta poupanca\n\t\t2 - Creditar\n\t\t3 - Debitar\n\t\t4 - Saldo\n\t\t5 - Aplicar rendimentos\n\t\t6 - Listar contas poupanca\n\t\t7 - Ver aniversario\n\t\t8 - Excluir poupanca\n\t\t0 - Voltar\n"; System.out.println(menuPoupanca); System.out.print("\n\t\tEntre com a opcao: "); int opcao = sc.nextInt(); switch(opcao){ case 1: System.out.print("\t\tNovo titular: "); String nome = sc.next(); System.out.print("\t\tNumero da conta: "); int num = sc.nextInt(); contaspoupanca.add(new ContaPoupanca(num, nome)); System.out.println("\t\tOperacao realizada de com sucesso !"); break; case 2: System.out.print("\t\tNumero da conta: "); num = sc.nextInt(); System.out.print("\t\tQuantia: "); double quantia = sc.nextDouble(); for(ContaPoupanca c: contaspoupanca){ if(num == c.numero){ c.creditar(quantia); System.out.println("\t\tOperacao realizada com sucesso !"); } } break; case 3: System.out.print("\t\tNumero da conta: "); num = sc.nextInt(); System.out.print("\t\tQuantia: "); quantia = sc.nextDouble(); for(ContaPoupanca c: contaspoupanca){ if(num == c.numero){ c.debitar(quantia); } } break; case 4: System.out.print("\t\tNumero da conta: "); num = sc.nextInt(); for(ContaPoupanca c: contaspoupanca){ if(num == c.numero){ System.out.println("\t\tSeu saldo eh de: " + c.obterSaldo()); } } break; case 5: System.out.print("\t\tNumero da conta: "); num = sc.nextInt(); for(ContaPoupanca c: contaspoupanca){ if(num == c.numero){ c.aplicarRendimentos(); System.out.println("\t\tOperacao realizada com sucesso !"); } } break; case 6: System.out.println("\t\t============== POUPANCAS CADASTRADAS ==============="); for(ContaPoupanca c: contaspoupanca) System.out.print("\t\tNome: " + c.titular + "\n\t\tNumero: " + c.numero + "\n\t\tData: " + c.data + "\n\t\t----------------\n"); break; case 7: System.out.print("\t\tNumero da conta: "); num = sc.nextInt(); for(ContaPoupanca c: contaspoupanca){ if(num == c.numero){ System.out.println("\t\tAniversario: " + c.data); } } break; case 8: System.out.print("\t\tEntre com o numero da sua conta: "); num = sc.nextInt(); int cont = 0; for(ContaPoupanca c: contaspoupanca){ if(c.numero == num) contaspoupanca.remove(cont); cont++; } break; case 0: menuPrincipal(); break; default:System.out.println("\t\tOpcao invalida !"); } } private static int menuPrincipal(){ mostraData(); String menu = "\n\t\t1 - Conta Corrente\n\t\t2 - Conta Poupanca\n\t\t0 - Sair\n"; System.out.println(menu); System.out.print("\t\tEntre com a opcao: "); op = sc.nextInt(); return op; } public static void main(String[] args){ menuPrincipal(); do{ switch(op){ case 1: menuCorrente();break; case 2: menuPoupanca();break; case 0: break; default:System.out.println("\t\tOpcao invalida !"); } }while(op != 0); System.exit(0); } } Compartilhar este post Link para o post Compartilhar em outros sites
eibon 2 Denunciar post Postado Dezembro 14, 2008 Não é recomendado usar o modificador statico nesse caso,não é uma boa prática. Se dois usuarios fazem sei lá o que ao mesmo tempo,um irá reescrever o que o outro fez. Cara,e é só colocar no construtor mesmo (this.numero = this.numero + 1) e não os colocando estaticos. Reveja seu código... Compartilhar este post Link para o post Compartilhar em outros sites
dark_wolk 0 Denunciar post Postado Dezembro 15, 2008 eu resolvi assim: import java.util.Date; import java.text.SimpleDateFormat; public class Conta{ [b]static protected int proxNumero;[/b] protected int numero; protected double saldo; protected String titular; protected Date hoje = new Date(); String formato = "dd/MM/yyyy"; SimpleDateFormat formatter = new SimpleDateFormat(formato); protected String data = formatter.format(hoje); public Conta(String titular){ [b]this.proxNumero++;[/b] [b]this.numero = proxNumero;[/b] this.saldo = 0; this.titular = titular; this.data = data; } public double obterSaldo(){ return this.saldo; } } Compartilhar este post Link para o post Compartilhar em outros sites
eibon 2 Denunciar post Postado Dezembro 15, 2008 Ficava até mais bonito fazer do jeito que te falei (o resultado é o mesmo). Criou uma variável desnecessariamente. Compartilhar este post Link para o post Compartilhar em outros sites
Marco Biscaro 0 Denunciar post Postado Dezembro 15, 2008 proust, tem certeza que com variáveis não-estáticas, obteríamos o mesmo resultado? Você sabe que variáveis estáticas são diferentes para cada objeto. Logo, como um objeto saberia do número de conta do outro, para poder assumir o próximo? Mas tudo bem, agora que funcionou... Uma sugestão para dark_wolk é o seguinte: todas as vezes que for fazer uma referência à uma variável estática, use o nome da CLASSE, e não do objeto (não use "this" no caso da variável "proxNumero", use "Conta.proxNumero". Isso explicita que a variável é estática e evita erros como o que aconteceram ao criar duas contas ao mesmo tempo. Compartilhar este post Link para o post Compartilhar em outros sites
eibon 2 Denunciar post Postado Dezembro 15, 2008 A classe chamando a classe conta faria isso. Mas tanto faz...e não tinha prestado atenção nisso... Abraço! Compartilhar este post Link para o post Compartilhar em outros sites