我有一个班级BankAccount
public class BankAccount {
private double balance;
public BankAccount() {
balance = 0;
}
public BankAccount(double initialBalance) {
balance = initialBalance;
}
public void deposit(double amount) {
balance = balance + amount;
}
public void withdraw(double amount) {
balance = balance - amount;
}
public double getBalance() {
return balance;
}
}
我还在BankAccountGroup类中有一个类的数组
public class BankAccountGroup {
private BankAccount[] bankAccounts;
public BankAccountGroup(BankAccount[] bankAccounts) {
this.bankAccounts = bankAccounts;
}
public double getBalance(int i) throws NullPointerException {
return bankAccounts[i].getBalance();
}
public double removeAccount(int i) throws NullPointerException {
if(bankAccounts[i] != null) {
return bankAccounts[i].getBalance();
bankAccounts[i] = null;
}
else {
return 0;
}
}
}
在方法public double removeAccount(int i)
中,如果该帐户不为空,我想在第i个帐户中返回余额,然后在索引i的数组元素中将该索引设置为null为null。如果该元素已为null,则返回0.
然后我收到错误
D:\CS 140>javac assignment03\BankAccountGroup.java
assignment03\BankAccountGroup.java:17: error: unreachable statement
bankAccounts[i] = null;
^
assignment03\BankAccountGroup.java:23: error: missing return statement
}
^
我知道无法访问的语句错误基本上是编译器的无意义代码,但我不明白为什么。对于不返回语句,该方法可以在两个路径中清楚地返回语句。我唯一的想法是应该切换ifAn中的ifAccount中的两行,但是我不能将第i个元素设置为null。
答案 0 :(得分:3)
你不能把业务代码放在“return”语句之后,因为它永远不会到达......当你“返回”你从方法“退出”时。
试试这个:
public double removeAccount(int i) throws NullPointerException {
if(bankAccounts[i] != null) {
double result = bankAccounts[i].getBalance();
bankAccounts[i] = null;
return result;
}
else {
return 0;
}
}
答案 1 :(得分:2)
这段代码是伪造的:
if(bankAccounts[i] != null) {
return bankAccounts[i].getBalance();
bankAccounts[i] = null;
}
返回后不会执行任何语句。想一种保存返回结果的方法,将指针设置为null然后返回。您将需要一个辅助变量。
答案 2 :(得分:2)
从metohd返回后,没有必要执行下一行代码。这就是你看到这个例外的原因。
之后,将它变为null是没有多大意义的。你可以做这样的事情
View Model