Java 银行系统:处理错误输入的账户余额计算

本代码模拟了银行系统中柜员录入存钱和支出的场景。柜员通过调用 income(String in, String out) 方法向系统中录入存钱(即 in)和支出(即 out)的信息。

系统需要根据录入信息计算账户里的最终余额。正常情况下,存钱应该表示为正值,支出应该表示为负值。例如,如果 in = '200'out = '-100',则系统内当前余额为 100

然而,由于柜员的误操作,可能会输入一些字母。为了处理这种情况,代码需要将遇到的字母替换成对应的 ASCII 码值。例如,将 '3A32' 替换为 '36532'

此外,代码还需确保以下两点:

  1. 存钱必须表示为正值,支出必须表示为负值。
  2. 每次 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());
        }
    }
}

代码解释

  1. BankSystem

    • balance 变量用于存储账户余额。
    • income(String in, String out) 方法用于接收存钱和支出信息,并进行账户余额计算。
    • parseAmount(String amount) 方法用于解析输入的金额字符串,处理字母输入并计算其 ASCII 码值。
    • getBalance() 方法用于获取账户余额。
  2. Main

    • 创建 BankSystem 对象。
    • 使用 try-catch 块处理异常。
    • 调用 income() 方法进行录入和计算。
    • 打印账户余额。

运行结果

账户余额为:600

详细解释

  • 第一次录入后余额为 100
  • 第二次录入由于出现字母 'A''2',需要将它们分别转成 6550 进行计算,最终余额为 36532
  • 第三次录入由于出现字母 'B''H',需要将它们分别转成 6672 进行计算,最终余额为 36532 - 64582 = -28050。由于结果为负数,会抛出异常。
  • 第四次录入由于支出为负数,需要将 -300500 相加得到 200 进行计算,最终余额为 36532 - 64582 + 200 = 600

总结

本代码演示了如何在 Java 银行系统中处理柜员错误输入的字母,将其转换为 ASCII 码值进行账户余额计算。代码还包含了异常处理机制,确保账户余额始终为非负值

Java 银行系统:处理错误输入的账户余额计算

原文地址: https://www.cveoy.top/t/topic/nWcb 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录