For no ArrayList

10 respostas
N

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

10 Respostas

ViniGodoy

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

ViniGodoy

Quem tem as contas é o sistema bancário, não a Conta. Então o ideal seria deixar o ArrayList na classe SistemaBancario:

/*
 * 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&lt;Conta&gt; contas = new ArrayList&lt;&gt;();

    public void criarContas() {
        // Cria as contas
        Conta c1 = new Conta(&quot;Guilherme&quot;, 1, 100, 100);
        Conta c2 = new Conta (&quot;NaCama&quot;, 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();
    }
}

Dê uma lida nesse tópico, ele pode te ajudar:
http://www.guj.com.br/java/74068-classe-vector#389435

N
ViniGodoy:
Quem tem as contas é o sistema bancário, não a Conta. Então o ideal seria deixar o ArrayList na classe SistemaBancario:
/*
 * 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&lt;Conta&gt; contas = new ArrayList&lt;&gt;();

    public void criarContas() {
        // Cria as contas
        Conta c1 = new Conta(&quot;Guilherme&quot;, 1, 100, 100);
        Conta c2 = new Conta (&quot;NaCama&quot;, 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();
    }
}

Dê uma lida nesse tópico, ele pode te ajudar:
http://www.guj.com.br/java/74068-classe-vector#389435


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??

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.

N

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.

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???

ViniGodoy

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

N

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

ViniGodoy

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

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.

N

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.


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

Criado 21 de março de 2013
Ultima resposta 21 de mar. de 2013
Respostas 10
Participantes 2