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

时间:2015-09-23 13:34:04

标签: java arrays null return

我有一个班级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。

3 个答案:

答案 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