我正在尝试执行以下操作:
写一个布尔方法,将帐户添加到模式。
a。它应该有一个用于费率的参数,一个帐户类型。
b。如果他们还没有一个帐户,则该帐户将成为赞助人的第一个帐户,或者第二个帐户。
c。如果他们已经有两个帐户,方法返回false,否则返回true。
这是代码:
public class Assignment6 {
public static void main(String[] args) {
System.out.println(BankPatron.addAccount(11,AccountType.CD));
System.out.println(BankPatron.addAccount(12,AccountType.CD));
System.out.println(BankPatron.addAccount(13,AccountType.CD));
}
}
class BankPatron {
public static BankAccount account1;
public static BankAccount account2;
public static Boolean addAccount(double rate, AccountType type) {
if (account1 == null) {
BankAccount account1 = new BankAccount("","",rate,type);
System.out.println(account1.getRate());
return true;
}
else if (account2 == null) {
BankAccount account2 = new BankAccount("","",rate,type);
System.out.println(account2.getRate());
return true;
}
else {
return false;
}
}
}
此返回:
11.0
true
12.0
true
13.0
true
因此,这意味着帐户1对象被写了三遍,对吗?在AddAccount完成后,我该如何获得account1的保存,因此,一旦AddAccount再次运行,它将看到Account1不再是null?
if
-block中的本地变量正在遮蔽静态字段。
而不是:
if (account1 == null) {
BankAccount account1 = new BankAccount("", "", rate, type);
// ...
}
应该是:
if (account1 == null) {
account1 = new BankAccount("", "", rate, type);
// ...
}
很可能,您还需要重构BankPatron
不使用static
字段/方法,而是实例字段/方法。
这将允许您写作:
BankPatron bankPatron = new BankPatron();
bankPatron.addAccount(11, AccountType.CD);
// ...
避免在条件中内部重新保证帐户1和account2。
if (account1 == null) {
BankAccount account1 = new BankAccount("","",rate,type);
....
else if (account2 == null) {
BankAccount account2 = new BankAccount("","",rate,type);
这应该是:
if (account1 == null) {
account1 = new BankAccount("","",rate,type);
.....
else if (account2 == null) {
account2 = new BankAccount("","",rate,type);
,如果您的程序是多线程的,则通过执行以下操作使此方法同步:
public synchronized static Boolean addAccount(double rate, AccountType type) {
检查帐户1是null之后,您将创建新的bankAccount对象并将其分配给本地变量account1,而不是'account1'字段。查看您的代码中的这一行
BankAccount account1 = new BankAccount("","",rate,type);
此account1变量的范围将在if块内。因此,您的分配将发生在本地的" account1"对象而不是静态字段'account1'
上只需用以下方式替换此代码线:
account1 = new BankAccount("","",rate,type);
还对else 2中的Account2进行类似的更改。您将获得所需的结果
11.0
true
12.0
true
false