简易银行系统
难度:
标签:
题目描述
代码结果
运行时间: 173 ms, 内存: 44.3 MB
/*
* Solution using Java Stream
* The Bank class simulates a simple banking system with functionalities for transferring, depositing, and withdrawing money.
* In this solution, we use Java Streams for more functional-style processing.
*/
import java.util.Arrays;
import java.util.stream.IntStream;
public class Bank {
private long[] balance;
public Bank(long[] balance) {
this.balance = Arrays.copyOf(balance, balance.length);
}
public boolean transfer(int account1, int account2, long money) {
// Check if both accounts are valid and if account1 has enough balance
return isValidAccount(account1) && isValidAccount(account2) && balance[account1 - 1] >= money
&& IntStream.of(account1 - 1, account2 - 1)
.filter(i -> i >= 0 && i < balance.length)
.reduce((acc1, acc2) -> {
balance[acc1] -= money;
balance[acc2] += money;
return acc2;
})
.isPresent();
}
public boolean deposit(int account, long money) {
// Check if the account is valid
return isValidAccount(account) && updateBalance(account - 1, money, true);
}
public boolean withdraw(int account, long money) {
// Check if the account is valid and has enough balance
return isValidAccount(account) && updateBalance(account - 1, money, false);
}
private boolean isValidAccount(int account) {
return account > 0 && account <= balance.length;
}
private boolean updateBalance(int account, long money, boolean deposit) {
if (deposit) {
balance[account] += money;
} else if (balance[account] >= money) {
balance[account] -= money;
return true;
}
return deposit;
}
}
解释
方法:
该题解实现了一个简易的银行系统,包括初始化账户余额、转账、存款和取款功能。构造函数初始化银行系统的账户余额。转账函数检查账户有效性和余额后进行金额转移。存款函数只检查账户有效性后增加余额。取款函数则检查账户有效性和余额后进行扣款。
时间复杂度:
O(1)
空间复杂度:
O(n)
代码细节讲解
🦆
在`Bank`类的方法中,如何处理并发调用的情况?例如,同时从一个账户进行转账和取款。
▷🦆
为什么在转账、存款和取款方法中,账户编号的有效性检查是首先执行的?是否有特定的原因确保这种顺序?
▷🦆
在`transfer`方法中,如果在扣除`account1`余额后程序异常退出,如何确保数据的一致性?
▷🦆
在执行操作前对账户余额进行检查,但是否存在某些边界条件下未被考虑的情况?例如账户余额正好等于转账金额。
▷