For no ArrayList

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();
        
    }
}

Para que o for rode, é necessário ter um for no seu código.

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:

[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:

  • criar uma nova conta no banco
  • remover uma conta do banco
  • fazer a transferência entre duas contas

E por aí vai.

[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.

E como eu faria pra rodar um for pela classe Conta…
teria como???

Só se você tivesse mais de uma conta naquele ArrayList.

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