if-satement和循环对象arraylist

时间:2017-06-04 09:44:29

标签: java 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语句应该检查两个帐户是否存在并将钱从有钱的帐户转移到用户已选择的帐户但跳过if语句并说没有帐户。

4 个答案:

答案 0 :(得分: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)次。将帐户存储在帐户ID为密钥且帐户为值的HashMap中会更有效。

答案 1 :(得分:0)

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

您正在检查这两种情况的相同元素(位置i)。 帐号可能不会同时accountNumbernewAccountNumber

答案 2 :(得分: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
}

答案 3 :(得分:0)

如果您的搜索逻辑有两个帐号,则您检查相同的帐户对象是不正确的。

您可以使用每个帐户对象的arraylist搜索特定帐号:

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