Olá a todos…
estou com um certo problema para um for percorrer um ArrayList…
o programinha é um programinha de banco onde vc tem seu saldo, limite e dados… e vc pode fazer transferencia, saque deposito… coisa básica…
o problema é na hora de fazer o for “rodar” ele não está indo… alguém pode me dar uma idéia???
vou colar o código das 2 classes…
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package sistema.bancario;
import java.util.ArrayList;
/**
*
* @author nacama
*/
public class Conta {
ArrayList<Conta> conta = new ArrayList<>();
private String nome;
private int numeroConta;
private double saldo;
private double limite;
public Conta(){
}
public Conta(String nome, int numeroConta, double saldo, double limite) {
this.nome = nome;
this.numeroConta = numeroConta;
this.saldo = saldo;
this.limite = limite;
}
public void saque(double valor) {
if (saldo < valor) {
limite -= (valor-saldo);
saldo = 0;
} else {
saldo -= valor;
}
}
public void deposito(double valor) {
if (limite < 100) {
saldo += (100-limite);
limite = 100;
} else {
saldo += valor;
}
}
public void transferencia(double valor, int numeroConta) {
if (saldo < valor) {
limite -= (valor - saldo);
saldo = 0;
} else {
saldo -= valor;
}
for (Conta p : conta) {
if (numeroConta == p.numeroConta) {
p.saldo += valor;
System.out.println("Transferencia ocorreu com sucesso");
}
}
}
public void imprime(){
System.out.println("Dado bancário");
System.out.println("Nome: "+nome);
System.out.println("Numero da Conta: "+numeroConta);
System.out.println ("Saldo: "+saldo);
System.out.println("Limite: "+limite);
for(Conta p:conta ){
System.out.println("Nome: "+p.nome);
System.out.println("Numero da Conta: "+p.numeroConta);
System.out.println ("Saldo: "+p.saldo);
System.out.println("Limite: "+p.limite);
}
}
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package sistema.bancario;
/**
*
* @author nacama
*/
import java.util.*;
public class SistemaBancario {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
Conta c1 = new Conta("Guilherme", 1, 100, 100);
Conta c2 = new Conta ("NaCama", 2, 100, 100);
c2.transferencia(20, 1);
c1.imprime();
c2.imprime();
}
}
Quem tem as contas é o sistema bancário, não a Conta. Então o ideal seria deixar o ArrayList na classe SistemaBancario:
[code]/*
To change this template, choose Tools | Templates
and open the template in the editor.
*/
package sistema.bancario;
/**
*
@author nacama /
import java.util.;
public class SistemaBancario {
private List<Conta> contas = new ArrayList<>();
public void criarContas() {
// Cria as contas
Conta c1 = new Conta("Guilherme", 1, 100, 100);
Conta c2 = new Conta ("NaCama", 2, 100, 100);
// Adiciona na lista
contas.add(c1);
contas.add(c2);
// Adiciona na lista
c2.transferencia(20, 1);
// Imprime as contas
for (Conta conta : contas) {
conta.imprime();
}
}
/**
@param args the command line arguments
*/
public static void main(String[] args) {
new SistemaBancario().criarContas();
}
}[/code]
[quote=ViniGodoy]Quem tem as contas é o sistema bancário, não a Conta. Então o ideal seria deixar o ArrayList na classe SistemaBancario:
[code]/*
To change this template, choose Tools | Templates
and open the template in the editor.
*/
package sistema.bancario;
/**
*
@author nacama /
import java.util.;
public class SistemaBancario {
private List<Conta> contas = new ArrayList<>();
public void criarContas() {
// Cria as contas
Conta c1 = new Conta("Guilherme", 1, 100, 100);
Conta c2 = new Conta ("NaCama", 2, 100, 100);
// Adiciona na lista
contas.add(c1);
contas.add(c2);
// Adiciona na lista
c2.transferencia(20, 1);
// Imprime as contas
for (Conta conta : contas) {
conta.imprime();
}
}
/**
@param args the command line arguments
*/
public static void main(String[] args) {
new SistemaBancario().criarContas();
}
}[/code]
Dê uma lida nesse tópico, ele pode te ajudar: http://www.guj.com.br/java/74068-classe-vector#389435[/quote]
Opa primeiramente obrigado ae pela ajuda…
mas vc disse que eu tenho que colocar um for no meu código…
mas o for não está ali no transferencia???
outra coisa que eu não entendi… foi o pq vc criou outro ArrayList na Classe principal??
1 ArrayList não bastava??
Oi. Tem sim, desculpe, não tinha visto o do transferencia().
Do jeito que você fez, cada conta tem seu próprio ArrayList.
Note também que você nunca chama o método add do ArrayList. É esse método que adiciona contas dentro da lista.
O correto é que o ArrayList de conta seja removido. Quem conhece todas as contas de seus correntistas é o sistema bancario. Um ArrayList representa sempre uma lista, um conjunto, um grupo de contas. Portanto, é o sistema bancário que teria que ter métodos entre várias contas como:
[quote=ViniGodoy]Oi. Tem sim, desculpe, não tinha visto o do transferencia().
Do jeito que você fez, cada conta tem seu próprio ArrayList.
Note também que você nunca chama o método add do ArrayList. É esse método que adiciona contas dentro da lista.
O correto é que o ArrayList de conta seja removido. Quem conhece todas as contas de seus correntistas é o sistema bancario. Um ArrayList representa sempre uma lista, um conjunto, um grupo de contas. Portanto, é o sistema bancário que teria que ter métodos entre várias contas como:
criar uma nova conta no banco
remover uma conta do banco
fazer a transferência entre duas contas
E por aí vai.[/quote]
Nossa, muito obrigado pela sua explicação. Ela está bem clara…
então toda vez que eu criar uma ArrayList é bom criar na classe principal??
Agora acabou surgindo outra dúvida…
como posso fazer o for na classe Conta???
É bom criar na classe que representa o conjunto. Por exemplo, você poderia ter uma classe Banco.
Uma lista de alunos poderia estar na classe Turma.
E por aí vai…
No caso, se sua classe principal representa um “SistemaBancário” multibancos, ela poderia ter um List de Bancos, que por sua vez possui um List de contas.
Para o for funcionar só com a própria conta, você poderia fazer:
contas.add(this);
no construtor. Mas veja, você só está adicionando a própria conta que está sendo criada, na lista de contas que tem dentro da conta. O que não faz sentido nenhum do ponto de vista lógico.
[quote=ViniGodoy]Para o for funcionar só com a própria conta, você poderia fazer:
contas.add(this);
no construtor. Mas veja, você só está adicionando a própria conta que está sendo criada, na lista de contas que tem dentro da conta. O que não faz sentido nenhum do ponto de vista lógico.[/quote]
Obrigado de verdade…
eu não fiz exatamente como você fez ai mas eu consegui…
Obrigado pela sua explicação…
vc conseguiu me tirar muitas dúvidas =D