2011-11-25 13 views
5

Estoy haciendo una tarea de Java que es como un simple sistema bancario con objetos de Cliente y SavingsAccount. Almacé todos los objetos de Cliente en una lista de arrays y también estaba planeando hacer lo mismo con los objetos SavingsAccount, pero quizás eso no sea necesario. Cada SavingsAccount tiene un miembro de datos llamado accountNumber que es único.¿Encontrar un objeto con un miembro de datos con un valor único en Java?

La Cuenta de ahorros también incluye a los miembros de la cuenta lika accountBalance. Entonces mi pregunta es ¿cómo puedo llegar a una cuenta de ahorro que tiene el número de cuenta igual a "1002" (por alguna razón los tengo como cadenas) y luego poder establecer u obtener valores del miembro de datos, como accountBalance con setAccountBalance? ¡La ayuda está relacionada! ¡Gracias!

puedo crear el objeto de cuenta

SavingsAccount account = new SavingsAccount(inAccount); 

El SavingsAccount clase:

class SavingsAccount { 

// data members 
private String accountType; 
private String accountNumber; 
private double accountInterestRate; 
private int accountBalance; 

// constructor 
public SavingsAccount(String inNumber){ 
    accountType = "Saving"; 
    accountNumber = inNumber; 
    accountInterestRate = 0.5; 
    accountBalance = 0; 
} 

// get account number 
public String getAccountNumber() { 
    return accountNumber; 
} 

// get account balance 
public int getAccountBalance() { 
    return accountBalance; 
} 

// get interest rate 
public double getAccountInterestRate(){ 
    return accountInterestRate; 
} 

    // set new value to balance 
    public void setAccountBalance(int inMoney){ 
    accountBalance = accountBalance + inMoney; 
    } 

} 

EDIT:

Desde que estoy aprendiendo Java, prefiero una solución que no es complicado usar en este momento. Sé cómo usar el arraylist, pero todavía no he llegado al hashmap, y esperaba una solución más simple, pero quizás no la mejor, por ahora. ¿No hay una forma de alcanzar objetos sin "recolectarlos" en arraylist o hashmap?

+3

no se puede comprobar cadena con el operador "==". Use equals() o equalsIgnoreCase() en su lugar. – gprathour

+0

Correcto, edité mi pregunta –

Respuesta

1

En lugar de almacenar las cuentas en un ArrayList<SavingsAccount> sugiero que las almacene en un HashMap<String, SavingsAccount>.

Poner la cuenta en el mapa de la derecha después de crearlo:

SavingsAccount account = new SavingsAccount(inAccount); 
accountMap.put(inAccount, account); 

Luego, puede hacerse con una cuenta fácil y eficiente haciendo

accountMap.get(accountNumber); 

Para asegurarse de que una cuenta mapeada por algún número de cuenta siempre tiene ese mismo número de cuenta, sugiero que haga accountNumber final:

... 
private final String accountNumber; 
... 
+0

OK, pero ¿los objetos deben estar en un HashMap? ¿No podrían ser "gratis" y simplemente seleccionar uno de ellos? –

+0

Para poder * encontrar * uno necesita un lugar * para * buscar *. Si solo están flotando, no puedes buscarlo en ninguna parte. * Sin embargo * puedes poner 'HashMap' como un miembro estático de la clase' SavingsAccount' y agregar 'this' al mapa en el constructor' SavingsAccount', y crear un método estático como este: 'public static getSavingsAccount (String num) {return map.get (num); } ' Sugiero que considere usar el patrón de fábrica y siempre pregunte a 'SavingsAccount' por un objeto de cuenta.(Esto le permitiría evitar crear dos objetos de cuenta con el mismo número). – aioobe

0

Me colocarlos en un mapa como

final Map<String, SavingsAccount> accounts = new LinkedHashMap<String, SavingsAccount>(); 

// get an account. 
SavingsAccount account = accounts.get(accountKey); 

// add an account 
accounts.put(accountKey, account); 
0

Hashing por número de cuenta es una forma efectiva de conseguir un SavingsAccount en tiempo constante. Suelta ArrayList y usa un HashMap;

HashMap<String, SavingsAccount> map = new HashMap<String, SavingsAccount>(); 
SavingsAccount account = new SavingsAccount(inNumber); 
map.put(inNumber, account); 

Entonces recuperarlo con:

SavingsAccount account = map.get(inNumber); 
Cuestiones relacionadas