Dunque il mio problema è la realizzazione del metodo searchAccount() che soddisfa le seguenti specifiche:


  • Il metodo searchAccount() deve verificare l'esistenza del conto corrente passato come parametro nell'insieme dei correnti correnti esistenti nella banca e memorizzati nel vettore.

La mia implementazione è la seguente:

codice:
public class Bank {


    private BankAccount[] accounts;
    
    private int accountsNumber;
    
    private String bankCode;
    
    private static final int MAX_NUMBER_OF_ACCOUNTS = 100;
    
    public Bank (String bankCode){
        this.bankCode = bankCode;
        accounts = new BankAccount[MAX_NUMBER_OF_ACCOUNTS];
    }
    
    public String getBankCode() {
        return bankCode;
    }
    
    public int getAccountsNumber() {
        return accountsNumber;
    }
    
    public void addAccount(BankAccount ba) {


       //Il metodo addAccount() deve aggiungere il conto corrente passato 
       //come parametro al vettore dei conti correnti presente nella banca, 
       //se non e' già presente.
        
        if(!searchAccount(ba))
            for(int i=0;i<=accounts.length-1;i++)
                if(accounts[i]==null)
                    accounts[i]=ba;
           
    }
    
    public boolean searchAccount(BankAccount ba) {
        //        Il metodo searchAccount() deve verificare l'esistenza
        //        del conto corrente passato come parametro nell'insieme 
        //        dei correnti correnti esistenti nella banca e memorizzati nel vettore.
        
        boolean trovato=false;
        int count=0;
        while(count<=accounts.length-1) {
            if(accounts[count]!=null &&(accounts[count].getCode().equals(ba.getCode())))
                trovato=true;
            else
                trovato=false;
            count++;
        } 
        return trovato;
        
    }
    
    public String toString(){
        String output = "Codice banca: " + bankCode + ", lista conti correnti: \n";
        for(int i = 0; i < accountsNumber; i++){
            output = output + accounts[i] + "\n";
        }
        return output;
    }
}
Ottengo però a runtime dei comportamenti indesiderati! In particolare dato questo main:
codice:
public class Main {


    public static void main(String[] args) {
        
        // print a large HTML header
        System.out.println("<h4>-- Bank account exercise --</h4>");
        
        // create 5 objects of type BankAccount 
        BankAccount c1 = new BankAccount("001",5);
        BankAccount c2 = new BankAccount("002",10);
        BankAccount c3 = new BankAccount("003",15);
        BankAccount c4 = new BankAccount("004",20);
        BankAccount c5 = new BankAccount("005",25);
        
        // creation one bank
        Bank b = new Bank("B001");
        
        b.addAccount(c1);
        b.addAccount(c2);
        b.addAccount(c3);
        b.addAccount(c4);
        b.addAccount(c5);
        System.out.println("Search bank account having code " + c4.getCode() + ": ");
        System.out.println((b.searchAccount(c4))?"Found":"Not found");
        System.out.println("c1.equals(c2)?" + (c1.equals(c2)));
        BankAccount c6 = new BankAccount("001",29);
        System.out.println("c1.equals(c6)?" + (c1.equals(c6)));
        //System.out.println(b);
    }
}
Eseguendo tale main ottengo il seguente output:

codice:
<h4>-- Bank account exercise --</h4>
Search bank account having code 004: 
Not found
c1.equals(c2)?false
c1.equals(c6)?true
Non va bene in quanto il code 004 è presente mentre viene restituito NOT FOUND.
Dove sbaglio?

Grazie
tulipan