2017-06-04 58 views
1

我在做一個學校項目,我模擬一個簡單的銀行系統,用戶創建賬戶並可以存入,轉賬和刪除賬戶。If-satement and loop in object arraylist

該方法的交易應該通過arraylist,找到第一個帳戶和第二個帳戶,並轉移資金,但它跳轉的代碼,並說該帳戶找不到。怎麼可能解決這個問題

下來下面的代碼顯示了該方法

public boolean transaction(String accountNumber, String newAccountNumber, double amount){ 
    for(int i = 0; i < bList.size(); i++){ 
     if(bList.get(i).getAccountNumber().equals(accountNumber)&& bList.get(i).getAccountNumber().equals(newAccountNumber)){ 
      bList.get(i).deposit(-amount); 
      deposit(newAccountNumber, amount); 
      return true; 
     } 
     else if(bList.get(i).getBalance()< amount){ 
      JOptionPane.showMessageDialog(null, "Du har inte tillräckligt med pengar"); 
      return false; 
     } 
     else if(!bList.get(i).getAccountNumber().equals(newAccountNumber) && bList.get(i).getAccountNumber().equals(accountNumber)){ 
      JOptionPane.showMessageDialog(null, "Kontot finns inte "); 
      return false; 
     } 
     else if(!bList.get(i).getAccountNumber().equals(newAccountNumber)){ 
      JOptionPane.showMessageDialog(null, "kontot finns inte"); 
      return false; 
     } 
     else if(!bList.get(i).getAccountNumber().equals(accountNumber)){ 
      JOptionPane.showMessageDialog(null, "Kontot finns inte"); 
      return false; 
     } 


    } 
    return false; 
} 

第一個if語句應該檢查是否兩個帳戶exsist並從有資金的賬戶轉移資金會發生什麼用戶選擇的帳戶,但它跳過if語句並表示沒有帳戶。

回答

3
if(bList.get(i).getAccountNumber().equals(accountNumber)&& bList.get(i).getAccountNumber().equals(newAccountNumber)) 

要檢查,如果相同的帳戶有兩個不同的賬號 - accountNumbernewAccountNumber。這永遠不會是真的。

您必須找到兩個賬戶,一個賬戶是第一個賬戶,另一個賬戶是第二個賬戶。

簡易方法做到這一點是一個嵌套的for循環:

for(int i = 0; i < bList.size(); i++){ 
    for(int j = 0; j < bList.size(); j++){ 
     if(bList.get(i).getAccountNumber().equals(accountNumber) && bList.get(j).getAccountNumber().equals(newAccountNumber)) { 
      .... 
     } 
    } 
} 

但會採取O(n^2)時間。將帳戶存儲在HashMap(帳戶ID是密鑰且帳戶是該值)的情況下會更有效。

+0

我試圖用兩種不同的IT satements cheking但它給了我嘗試做同樣的answere – GI88Z

+0

一個依偎的循環,但它仍然給了我相同的答案 – GI88Z

+0

@ GI88Z在這種情況下,您正在查找的帳戶中至少有一個不在列表中。 – Eran

0
if(bList.get(i).getAccountNumber().equals(accountNumber)&& bList.get(i).getAccountNumber().equals(newAccountNumber)) 

您正在檢查這兩種情況下的相同元素(均爲位置i)。 賬號可能永遠不會是accountNumbernewAccountNumber在同一時間。

0

正如@eran寫道,你有一個明顯的錯誤檢查,如果該帳戶同時具有accountNumber和newAccountNumber這當然只會是真實的,如果你交易來往於同一個帳戶。

我認爲,如果你重構代碼一點會比較簡單調試你的錯誤:

public boolean transaction(String accountNumber, String newAccountNumber, double amount){ 
    Account fromAccount = getAccount(accountNumber); 
    Account toAccount = getAccount(newAccountNumber); 

    if (fromAccount == null || toAccount == null) { 
      // At least one of the accounts is missing 
      JOptionPane.showMessageDialog(null, "Kontot finns inte "); 
      return false; 
    } else if (fromAccount.getBalance() < amount) { 
      // Not enough funds 
      JOptionPane.showMessageDialog(null, "Du har inte tillräckligt med pengar"); 
      return false; 
    } else { 
      fromAccount.deposit(-amount); 
      deposit(newAccountNumber, amount); 
      return true; 
    } 
    return false; 
} 

public Account getAccount(String accountNumber) { 
    for (int i = 0; i < bList.size(); i++){ 
     if(bList.get(i).getAccountNumber().equals(accountNumber) { 
      return bList.get(i); 
     } 
    } 
    return null; // No account matches 
} 
0

你的搜索邏輯是不對的,你正在檢查的同一帳戶對象,如果它有兩個賬號。

您可以使用嵌套的每個搜索特定帳戶的帳號對象的ArrayList:

for(Account account : bList) { 
    for(Account newaccount : bList) { 
     if(account.getAccountNumber().equals(accountNumber) && newaccount.getAccountNumber().equals(newAccountNumber)){ 
      //account matches 
     } 
    } 
}