我试图执行以下操作:
编写一个布尔方法,为模式添加一个帐户。
一个。它应该有一个rate参数和一个帐户类型参数。
湾如果该帐户尚未拥有该帐户,则该帐户将成为该帐户的第一个帐户;如果他们已经拥有一个帐户,则该帐户将成为第二个帐户。
℃。如果他们已经有两个帐户,则该方法返回false,否则返回 真。
以下是代码:
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
这意味着account1对象被写了三次,对吧?如何在addAccount完成后让account1保存,这样一旦addAccount再次运行,它会看到account1不再为null?
答案 0 :(得分:3)
if
- 块中的局部变量会遮挡您的静态字段。
而不是:
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 :(得分:0)
如果条件允许,请避免在内部重新声明account1和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) {
答案 2 :(得分:0)
在检查account1为空后,您正在创建新的BankAccount对象并将其分配给本地变量account1而不是“account1”字段。 在代码中查看此行
BankAccount account1 = new BankAccount("","",rate,type);
此account1变量的范围将在if块内。因此,您的作业将发生在本地“account1”对象上,而不是静态字段“account1”
只需用以下代码替换这行代码:
account1 = new BankAccount("","",rate,type);
对else if块中的account2也进行类似的更改。 您将获得所需的结果
11.0
true
12.0
true
false