如何避免布尔方法中对象被覆盖?账户添加布尔方法实现问询
搞定账户添加方法:防止对象覆盖+满足业务逻辑
嘿,我来帮你解决这个问题!既要实现符合要求的布尔型账户添加方法,又要避免对象被覆盖,核心就是只在目标位置为空的时候才赋值新对象——绝不能随便给已经存在的账户引用重新赋值。下面一步步拆解实现:
先理清楚业务逻辑的关键点
你需要的addAccount方法要满足:
- 接收利率(
rate)和账户类型两个参数 - 客户没账户时,把新账户设为第一个;已有一个时设为第二个
- 客户已有两个账户就返回
false,否则返回true
同时要避免对象覆盖:意思是不能把已经存在的第一个/第二个账户给替换掉,比如不能在已有第一个账户的情况下,直接把新账户赋值给firstAccount,这样原来的账户对象就被覆盖丢失了。
完整代码实现
1. 先定义Account类封装账户信息
首先得有一个账户类来存利率和类型,这样我们创建的账户对象才有意义:
public class Account { private double rate; private String accountType; // 构造方法初始化账户信息 public Account(double rate, String accountType) { this.rate = rate; this.accountType = accountType; } // 可选:添加getter方法,方便后续查看账户详情 public double getRate() { return rate; } public String getAccountType() { return accountType; } }
2. 实现Customer类和核心的addAccount方法
在客户类里维护两个账户引用,然后按规则添加:
public class Customer { // 用两个变量存客户的两个账户,初始都是null(没有账户) private Account firstAccount; private Account secondAccount; // 核心的添加账户方法 public boolean addAccount(double rate, String accountType) { // 第一步:先检查是否已经有两个账户了,满了直接返回false if (firstAccount != null && secondAccount != null) { return false; } // 创建新的账户对象(先把对象创建好,再决定放哪里) Account newAccount = new Account(rate, accountType); // 第二步:按顺序赋值,先看第一个账户是否为空 if (firstAccount == null) { firstAccount = newAccount; } else { // 第一个账户已存在,就赋值给第二个 secondAccount = newAccount; } // 添加成功,返回true return true; } // 可选:添加一个打印账户的方法,方便测试验证 public void printAccounts() { System.out.println("第一个账户: " + (firstAccount != null ? firstAccount.getAccountType() + " (利率: " + firstAccount.getRate() + "%)" : "无")); System.out.println("第二个账户: " + (secondAccount != null ? secondAccount.getAccountType() + " (利率: " + secondAccount.getRate() + "%)" : "无")); } }
3. 在Assignment6中测试方法
把你的主类补全,测试一下功能是否正常:
public class Assignment6 { public static void main(String[] args) { Customer customer = new Customer(); // 测试添加第一个账户 System.out.println("添加第一个账户: " + customer.addAccount(2.5, "储蓄账户")); // 输出true // 测试添加第二个账户 System.out.println("添加第二个账户: " + customer.addAccount(1.2, "活期账户")); // 输出true // 测试添加第三个账户(应该失败) System.out.println("添加第三个账户: " + customer.addAccount(3.0, "投资账户")); // 输出false // 打印账户信息,验证是否正确 customer.printAccounts(); } }
防止对象覆盖的关键细节
我特意在代码里做了这几点来避免覆盖:
- 先判断是否满员:一进入方法就检查两个账户是否都存在,满了直接返回,避免多余操作
- 先判断变量是否为空再赋值:给
firstAccount或secondAccount赋值前,先确认它们是null(没有账户),这样就不会把已有的账户对象覆盖掉 - 提前创建新对象:先把新账户对象实例化好,再决定放到哪个位置,避免重复创建或者误操作
运行结果
运行主类后,你会看到这样的输出:
添加第一个账户: true 添加第二个账户: true 添加第三个账户: false 第一个账户: 储蓄账户 (利率: 2.5%) 第二个账户: 活期账户 (利率: 1.2%)
内容的提问来源于stack exchange,提问作者Julien Rodriguez
相关产品推荐
相关产品推荐

