在Java中具有银行帐户的NullPointerException

在Java中具有银行帐户的NullPointerException,java,nullpointerexception,Java,Nullpointerexception,当我尝试在我的银行账户计划中创建新客户时,我会遇到此异常: 线程主java.lang.NullPointerException中出现异常 在bank.program.Customer.addAccountCustomer.java:18 在bank.program.BankProgram.mainBankProgram.java:24 Java结果:1 这意味着什么?我需要改变什么才能摆脱它 银行类别: 储蓄账户类别: 客户类别: 您正在尝试添加帐户,而不初始化存储帐户的ArrayList。将其

当我尝试在我的银行账户计划中创建新客户时,我会遇到此异常:

线程主java.lang.NullPointerException中出现异常 在bank.program.Customer.addAccountCustomer.java:18 在bank.program.BankProgram.mainBankProgram.java:24 Java结果:1 这意味着什么?我需要改变什么才能摆脱它

银行类别:

储蓄账户类别:

客户类别:


您正在尝试添加帐户,而不初始化存储帐户的ArrayList。将其添加到客户构造函数中

this.accounts = new ArrayList<Account>();

在Customer类中,声明ArrayList帐户。然后,您有一个名为addAccount的方法,但这个帐户似乎从未初始化过

在您创建客户对象的地方,您需要说:

newCustomer.accounts = new ArrayList<Account>();

用户,在将来询问有关错误或异常的问题时,请帮助我们,并向我们指出错误发生的位置。您的错误或异常消息将准确地告诉您这一点,只有您可以找到它在哪里,而不是我们。而且更重要的是,您需要学习如何调试NPE NullPointerException的一般概念。您应该仔细检查引发异常的行,找出哪个变量为null,然后回溯到代码中以了解原因。相信我,你会一次又一次地遇到这些问题。请看我的最新评论。你已经得到了正确的答案,而且这条评论是为了以后的问题,但在你上面的问题中,你没有指出哪一行是违规的。是的,我们可以尝试计算行数,但这很麻烦,容易出错,而且即使我们的计算是准确的,我们也可能不正确,因为我们不知道您可能不在代码中发布哪些包语句或空格。同样,如果您将来有类似的问题,请这样做,因为这将使您更容易获得帮助。例如accounts.addaccount;//***这是一个冒犯性的问题,考虑在你的代码中添加一个大声的评论或类似的东西。好的,我以后会记住的。感谢您指出,虽然这将工作,这可能不是最好的设计决策。一个对象通常应该尽可能地维护自己的管道。在这种情况下,在使用实例之前,要求客户的实例化器创建内部ArrayList没有任何好处。在学术性的、单一开发人员的环境中,当然,不管怎样;但在一个有多个开发人员的实际应用程序中,这是危险的。@Tenner同意,您的路线是最好的解决方案。您不希望每次创建新对象时都必须初始化对象的字段。我认为这是学术性的,只是想帮助他以最简单的方式解决问题。
public class SavingsAccount extends Account {
    private double interest = 2.9;

    public SavingsAccount() {     
        super();
    }

    public SavingsAccount(double bal, String id) {   
        super(bal, id);
    }

    @Override
    public void deposit(double amount) {

    }

    @Override
    public void withdraw(double amount) {

    }

    @Override  
    public double getBalance() {

    }

    @Override
    public String getAccountId() {

    }
}
public class Customer {
    private String firstName;
    private String lastName;
    private String number;      
    private ArrayList<Account> accounts;

    Customer(String firstName, String lastName, String number) { 
        this.firstName = firstName;
        this.lastName = lastName;
        this.number = number;
    }

    public void addAccount(SavingsAccount account) {
        accounts.add(account);
    }

    public ArrayList<Account> getAccounts() {
        return accounts;
    }
}
public class BankProgram {
    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);
        int numberOfCustomers = 0;
        Bank bank = new Bank("Bank name");

        System.out.print("Enter amount to deposit: ");
        double amount = input.nextDouble();
        System.out.println("Account number: " + numberOfCustomers);
        System.out.print("First name: ");
        String firstName = input.next();
        System.out.print("Last name: ");
        String lastName = input.next();
        System.out.print("Customer number: ");
        String pnumber = input.next();

        Customer newCustomer = new Customer(firstName, lastName, pnumber);        
        SavingsAccount savingsAccount = new SavingsAccount(amount, "11");
        newCustomer.addAccount(savingsAccount);
        bank.addCustomer(newCustomer);           
    }    
}
this.accounts = new ArrayList<Account>();
newCustomer.accounts = new ArrayList<Account>();