设置数组值 = 0 并缺少 return 语句

Setting an array value = 0 and missing return statement

我有一个 class 银行账户

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;
    }
}

我在 class BankAccountGroup

中也有一个 classes 数组
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 个帐户不为空,我想 return 余额,然后在索引 i 处的数组元素中将该索引设置为 null 为 null .如果该元素已经为空,return 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
        }
        ^

我知道 unreachable statement 错误对编译器来说基本上是无意义的代码,但我不明白为什么。至于 no return 语句,显然在该方法可以采用的两个路径中都有 return 语句。我唯一的想法是 removeAccount 中的 if 中的两行应该切换,但是我不能将第 i 个元素设置为 null。

此代码是伪造的:

    if(bankAccounts[i] != null) {
        return bankAccounts[i].getBalance();
        bankAccounts[i] = null;
    }

return之后的语句不会被执行。想办法保留return的结果,把指针设为null,然后return。您将需要一个辅助变量。

一旦您从方法中 return,就没有必要执行下一行代码了。这就是您看到该异常的原因。在 return 之后将其设为 null 没有多大意义。

你可以这样做

      if(bankAccounts[i] != null) {
            double balance = bankAccounts[i].getBalance();
            bankAccounts[i] = null;
            return balance;
        }

您不能将业务代码放在 "return" 语句之后,因为它永远不会到达...当您 "return" 您从方法中 "exit" 时。

试试这个:

 public double removeAccount(int i) throws NullPointerException {
    if(bankAccounts[i] != null) {
        double result = bankAccounts[i].getBalance();
        bankAccounts[i] = null;
        return result;
    }

    else {
        return 0;
    }
}