2012-07-23 5 views
0

J'ai juste ce que je suis sûr est très facile et petite question ... Alors disons que j'ai une classe de compte comme suit:boucle Iterator avec tableau

import java.text.NumberFormat; 

public class Account 
{ 
    private final double RATE = 0.03; // interest rate of 3.5% 
    private long acctNumber; 
    private double balance; 
    private String name; 

    //----------------------------------------------------------------- 
    // Sets up the account by defining its owner, account number, 
    // and initial balance. 
    //----------------------------------------------------------------- 
    public Account (String owner, long account, double initial) 
    { 
     name = owner; 
     acctNumber = account; 
     balance = initial; 
    } 
    //----------------------------------------------------------------- 
    // Deposits the specified amount into the account. Returns the 
    // new balance. 
    //----------------------------------------------------------------- 
    public double deposit (double amount) 
    { 
     balance = balance + amount; 
     return balance; 
    } 
    //----------------------------------------------------------------- 
    // Withdraws the specified amount from the account and applies 
    // the fee. Returns the new balance. 
    //----------------------------------------------------------------- 
    public double withdraw (double amount, double fee) 
    { 
     balance = balance - amount - fee; 
     return balance; 
    } 
    //----------------------------------------------------------------- 
    // Adds interest to the account and returns the new balance. 
    //----------------------------------------------------------------- 
    public double addInterest() 
    { 
     balance += (balance * RATE); 
     return balance; 
    } 
    //----------------------------------------------------------------- 
    // Returns the current balance of the account. 
    //----------------------------------------------------------------- 
    public double getBalance() 
    { 
     return balance; 
    } 
    //----------------------------------------------------------------- 
    // Returns a one-line description of the account as a string. 
    //----------------------------------------------------------------- 
    public String toString() 
    { 
     NumberFormat fmt = NumberFormat.getCurrencyInstance(); 
     return acctNumber + "\t" + name + "\t" + fmt.format(balance); 
    } 
} 

Et je crée la classe Banque montré ici ...

public class Bank 
{ 
    Account[] accounts;// = new Account[30]; 
    int count=0; 
    String name; 

    public Bank(String name) 
    { 
     this.name = name; 
     accounts = new Account[30]; 
    } 
    public void addAccount(Account acct) 
    { 
     accounts[count] = acct; 
     count++; 
    } 
    public void addInterest() 
    { 
     //for (Account acct : accounts) 
      //acct.addInterest(); 
     for(int i = 0; i < count; i++) 
      accounts[i].addInterest(); 
    } 
} 

Je reçois une erreur si je tente d'utiliser la méthode avec le pour (compte ACCT: comptes) addInterest() boucle vous voir en commentaire. Quelqu'un peut-il me donner un aperçu de la raison de cette situation? Je pensais que ces boucles étaient équivalentes. Merci d'avance.

+3

quelle erreur recevez-vous? – hvgotcodes

+0

appelez-vous jamais addAccount()? Avec le code que vous affichez, vous avez déclaré le tableau de comptes mais vous n'avez instancié aucun objet Account. Si c'est l'erreur, vous obtiendrez un NulPointerExxception .... – atk

+0

En guise de commentaire général, vous devriez éviter les tableaux comme la peste. Utilisez ['Collections'] (http://docs.oracle.com/javase/6/docs/api/java/util/Collections.html) (dans ce cas, un [' Set'] (http: // docs. oracle.com/javase/6/docs/api/java/util/Set.html), qui, parmi beaucoup d'autres fonctionnalités, augmente automatiquement en taille lorsque vous leur ajoutez '' .add() '. – Bohemian

Répondre

1

La boucle for sur un tableau itérable itère tous les 30 éléments, pas seulement les éléments que vous avez réellement ajoutés.

Vous pouvez utiliser un ArrayList<Account> et ajouter des éléments si nécessaire. Cela vous permet d'omettre le champ de compte:

public class Bank 
{ 
    ArrayList<Account> accounts = new ArrayList<Account>(); 
    String name; 

    public Bank(String name) 
    { 
     this.name = name; 
    } 
    public void addAccount(Account acct) 
    { 
     accounts.add(acct); 
    } 
    public void addInterest() 
    { 
     for (Account acct : accounts) 
      acct.addInterest(); 
    } 
} 
+0

C'était une réponse bien soignée :-) –

+0

Merci. J'appelais la méthode addInterest() après avoir ajouté seulement trois comptes, donc je pense que vous avez frappé le clou sur la tête. Très appréciée. – user1505612

0

Vous devez initialiser le tableau de compte

donc vous pourriez vouloir changer cela:

public void addInterest() 
    { 
     //for (Account acct : accounts) 
      //acct.addInterest(); 
     for(int i = 0; i < count; i++) 
      accounts[i].addInterest(); 
    } 

à quelque chose comme ceci:

 public void addInterest() 
     { 
      for (Account acct : accounts) { 
      acct= new Account("John",1234596069,200.00); 
      acct.addInterest(); 
      } 
//   for(int i = 0; i < count; i++) 
//    accounts[i].addInterest(); 
     } 

Essentiellement, vous devez initialiser le tableau variable avant d'appeler une méthode.

+0

Merci. J'ai eu une méthode principale où j'ai instancié un objet bancaire et ajouté quelques comptes, mais je réalise que je ne l'ai pas montré ici. Appréciez-vous de prendre le temps de regarder par-dessus mon code. – user1505612