Java银行转账程序操作对象属性返回错误,transfer方法异常排查
问题根因
你遇到的问题核心是account类的成员变量错误使用了static修饰符:
static修饰的属性属于类本身,所有该类的实例会共享同一份属性值,不会为每个账户单独存储独立的余额、id、名称信息。
具体运行流程拆解
- 创建A1账户实例时,给类的静态属性赋值:
id=A101、name=Tan Ah Teck、balance=88 - 后续创建A2账户实例时,直接覆盖了类的静态属性值,此时静态
balance被修改为9,id、name也同步被覆盖为A2的信息 - 执行
from.debit(19)操作时,判断的是当前共享的静态balance值9和转账金额19的大小,9<19,因此触发「You balance is insufficent.」提示,扣款操作不执行,balance仍为9 - 执行
to.credit(19)操作时,给共享的静态balance加19,最终值变为28 - 打印A1、A2余额时,读取的都是同一个类静态
balance的值,因此两个账户的余额都显示为28
修复方案
删除account类三个成员变量的static修饰符,将属性改为实例级别,每个账户就会拥有独立的属性存储:
public class account { // 移除static修饰符,改为实例属性 public String id; public String name; private int balance; public account() { id = "Null"; name = "Null"; balance = 0; } public account(String id, String name, int balance) { this.id = id; this.name = name; this.balance = balance; } public int getbalance() { return balance; } public void credit(int amount) { int newbalance = balance + amount; balance = newbalance; } public void debit(int amount) { if (amount <= balance) { int newbalance = balance - amount; balance = newbalance; } else { System.out.println("You balance is insufficent."); } } }
修改后重新运行测试类,就会得到预期结果:A1余额69、A2余额28,无余额不足提示。
内容的提问来源于stack exchange,提问作者jian
相关产品推荐
相关产品推荐

