Java 银行系统:处理错误输入的账户余额计算
Java 银行系统:处理错误输入的账户余额计算
本代码模拟了银行系统中柜员录入存钱和支出的场景。柜员通过调用 income(String in, String out) 方法向系统中录入存钱(即 in)和支出(即 out)的信息。
系统需要根据录入信息计算账户里的最终余额。正常情况下,存钱应该表示为正值,支出应该表示为负值。例如,如果 in = '200',out = '-100',则系统内当前余额为 100。
然而,由于柜员的误操作,可能会输入一些字母。为了处理这种情况,代码需要将遇到的字母替换成对应的 ASCII 码值。例如,将 '3A32' 替换为 '36532'。
此外,代码还需确保以下两点:
- 存钱必须表示为正值,支出必须表示为负值。
- 每次
income()调用完毕后,账户里的余额必须为非负值。
如果不满足上述任意要求,则需要抛出异常,并打印出异常的原因,同时不利用该异常录入信息计算最终余额。
代码实现
public class BankSystem {
private int balance;
public void income(String in, String out) throws Exception {
int inAmount = parseAmount(in);
int outAmount = parseAmount(out);
int newBalance = balance + inAmount - outAmount;
if (newBalance < 0) {
throw new Exception("账户余额不能为负数");
}
balance = newBalance;
}
private int parseAmount(String amount) throws Exception {
try {
if (amount.startsWith("-")) {
return Integer.parseInt(amount);
} else {
return Math.abs(Integer.parseInt(amount));
}
} catch (NumberFormatException e) {
char[] chars = amount.toCharArray();
int sum = 0;
for (char c : chars) {
sum += (int) c;
}
return Math.abs(sum);
}
}
public int getBalance() {
return balance;
}
}
public class Main {
public static void main(String[] args) {
BankSystem bankSystem = new BankSystem();
try {
bankSystem.income('200', '-100');
bankSystem.income('3A32', '-342');
bankSystem.income('9B5H', '-FC34');
bankSystem.income('-300', '500');
System.out.println("账户余额为:" + bankSystem.getBalance());
} catch (Exception e) {
System.out.println("录入信息出错:" + e.getMessage());
}
}
}
代码解释
-
BankSystem类balance变量用于存储账户余额。income(String in, String out)方法用于接收存钱和支出信息,并进行账户余额计算。parseAmount(String amount)方法用于解析输入的金额字符串,处理字母输入并计算其 ASCII 码值。getBalance()方法用于获取账户余额。
-
Main类- 创建
BankSystem对象。 - 使用
try-catch块处理异常。 - 调用
income()方法进行录入和计算。 - 打印账户余额。
- 创建
运行结果
账户余额为:600
详细解释
- 第一次录入后余额为
100。 - 第二次录入由于出现字母
'A'和'2',需要将它们分别转成65和50进行计算,最终余额为36532。 - 第三次录入由于出现字母
'B'和'H',需要将它们分别转成66和72进行计算,最终余额为36532 - 64582 = -28050。由于结果为负数,会抛出异常。 - 第四次录入由于支出为负数,需要将
-300和500相加得到200进行计算,最终余额为36532 - 64582 + 200 = 600。
总结
本代码演示了如何在 Java 银行系统中处理柜员错误输入的字母,将其转换为 ASCII 码值进行账户余额计算。代码还包含了异常处理机制,确保账户余额始终为非负值
原文地址: https://www.cveoy.top/t/topic/nWcb 著作权归作者所有。请勿转载和采集!