2011-11-25 37 views
5

Tôi đang thực hiện một tác vụ Java giống như một hệ thống ngân hàng đơn giản với các đối tượng Khách hàng và Tài khoản tiết kiệm. Tôi lưu trữ tất cả các đối tượng Customer trong một arraylist và tôi cũng có kế hoạch làm tương tự với các đối tượng SavingsAccount, nhưng điều đó có lẽ không cần thiết. Mỗi tài khoản tiết kiệm có một thành viên dữ liệu được gọi là accountNumber duy nhất.Tìm đối tượng có thành viên dữ liệu với giá trị duy nhất trong Java?

Tài khoản tiết kiệm cũng bao gồm các thành viên dữ liệu lika accountBalance. Vì vậy, câu hỏi của tôi là làm thế nào để tôi đạt được một SavingsAccount có accountNumber bằng "1002" (Đối với một số lý do tôi có chúng như Strings) và sau đó có thể thiết lập hoặc nhận giá trị từ thành viên dữ liệu, như accountBalance với setAccountBalance? Trợ giúp được đặt trước! Cảm ơn!

tôi tạo ra các đối tượng tài khoản

SavingsAccount account = new SavingsAccount(inAccount); 

Lớp SavingsAccount:

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:

Kể từ khi tôi đang học Java, tôi muốn có một giải pháp mà không phải là để phức tạp để sử dụng ngay bây giờ. Tôi biết làm thế nào để sử dụng arraylist, nhưng tôi đã không đạt đến hashmap được nêu ra, và đã hy vọng cho một đơn giản, nhưng có lẽ không phải là tốt nhất, giải pháp cho bây giờ? Không có cách nào để tiếp cận các đối tượng mà không "thu thập" chúng trong mảng danh sách hoặc hashmap?

+3

bạn không thể kiểm tra String với "==" điều hành. Sử dụng equals() hoặc equalsIgnoreCase() để thay thế. – gprathour

+0

Đúng vậy, tôi đã chỉnh sửa câu hỏi của mình –

Trả lời

1

Thay vì lưu trữ các tài khoản trong một ArrayList<SavingsAccount> Tôi đề nghị bạn lưu trữ chúng trong một HashMap<String, SavingsAccount>.

Đặt tài khoản vào bản đồ ngay sau khi tạo ra nó:

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

Sau đó bạn có thể có được giữ của một tài khoản một cách dễ dàng và hiệu quả bằng cách làm

accountMap.get(accountNumber); 

Để chắc chắn rằng một tài khoản được ánh xạ tới bởi một số số tài khoản luôn thực sự có số tài khoản đó, tôi đề nghị bạn thực hiện accountNumber final:

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

OK, nhưng các đối tượng phải nằm trong HashMap? Không phải họ "miễn phí" và chỉ chọn một trong số họ? –

+0

Để có thể * tìm thấy * một thứ bạn cần ở đâu đó để * xem * cho nó. Nếu họ chỉ lơ lửng xung quanh, bạn thực sự không thể tìm kiếm nó ở bất cứ đâu. Bạn * có thể * tuy nhiên đặt 'HashMap' là thành viên tĩnh của lớp' SavingsAccount' và thêm 'this' vào bản đồ trong hàm tạo' SavingsAccount' và tạo một phương thức tĩnh như sau: 'public static getSavingsAccount (String num) {return map.get (num); } '. Tôi khuyên bạn nên xem xét sử dụng mẫu nhà máy và luôn yêu cầu 'Tài khoản tiết kiệm 'cho một đối tượng tài khoản.(Điều này sẽ cho phép bạn tránh bao giờ tạo hai đối tượng tài khoản với cùng một num.) – aioobe

0

tôi sẽ đặt chúng trong một bản đồ như

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

Băm theo số tài khoản là một cách hiệu quả để nhận được một SavingsAccount trong thời gian liên tục. Thả ArrayList và sử dụng HashMap;

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

Sau đó, lấy nó với:

SavingsAccount account = map.get(inNumber); 
Các vấn đề liên quan