新手在线等解决,急!Exception in thread "main" java.lang.NullPointerException

ssc85 2017-10-08 07:54:19
新手在线等,请问该如何修改?
package banking;

public class Account {
protected double balance;

public Account(double balance) {
super();
this.balance = balance;
}

public double getBalance() {
return balance;
}

public void setBalance(double balance) {
this.balance = balance;
}

public boolean deposit(double amt) {
balance+=amt;
return true;
}
public boolean withdraw(double amt) {
if(amt<=balance) {
balance -= amt;
}else {
return false;
}
return true;

}



}


package banking;

public class SavingAccount extends Account {
private double interestRate;

public SavingAccount(double balance, double interestRate) {
super(balance);
this.interestRate = interestRate;
}

public double getInterestRate() {
return interestRate;
}


}


package banking;

public class CheckingAccount extends Account {
private double overdraftProtection;

public CheckingAccount(double balance) {
super(balance);
}

public CheckingAccount(double balance, double overdraftProtection) {
super(balance);
this.overdraftProtection = overdraftProtection;
}

public boolean withdraw(double amt) {
if(amt<=balance) {
balance -= amt;
return true;
}else {
if(overdraftProtection>= amt - balance) {
overdraftProtection -= amt - balance;
balance = 0;
}else {
return false;
}
}
return true;
}


}


package banking;

public class Customer {
private String lastName;
public String getLastName() {
return lastName;
}
public String getFirstName() {
return firstName;
}


private String firstName;
Account[] accounts;
int numberOfAccounts;
public Customer(String L,String F) {

lastName = L;
firstName =F;
}
public Customer() {

accounts = new Account[2];
}

public void addAccount(Account account) {

accounts[numberOfAccounts++]=account;
}
public Account getAccounts(int index) {
return accounts [index];
}


public int getNumberOfAccounts() {
return numberOfAccounts;
}


}


package banking;

public class Bank {
private Customer[] customers;
private int numberOfCustomers;
public Bank() {
customers = new Customer[5];
}
public Customer getCustomers(int index) {
return customers[index];
}
public int getNumberOfCustomers() {
return numberOfCustomers;
}
public void addCustomer(String L,String F) {
Customer customer = new Customer(L,F);
customers[numberOfCustomers]=customer;
numberOfCustomers++;
}



}



package banking;

public class TestBanking {
public static void main(String[] args) {
Bank bank = new Bank();
Customer customer;




bank.addCustomer("Jane", "Smith");
customer = bank.getCustomers(0);
customer.addAccount(new SavingAccount(500,0.05));
customer.addAccount(new CheckingAccount(200,400));

bank.addCustomer("oven", "Bryant");
customer = bank.getCustomers(1);
customer.addAccount(new CheckingAccount(200));

bank.addCustomer("Tim", "Soley");
customer=bank.getCustomers(2);
customer.addAccount(new SavingAccount(1500,0.05));
customer.addAccount(new CheckingAccount(200));

bank.addCustomer("Maria", "Soley");
customer = bank.getCustomers(3);
customer.addAccount(bank.getCustomers(2).getAccounts(1));
customer.addAccount(new SavingAccount(150,0.05));

for(int i = 0;i<bank.getNumberOfCustomers();i++) {
customer = bank.getCustomers(i);
System.out.println();
System.out.println("Customer "+customer.getLastName()+customer.getFirstName());

}








}

}


错误是Exception in thread "main" java.lang.NullPointerException
at banking.Customer.addAccount(Customer.java:28)
at banking.TestBanking.main(TestBanking.java:13)
不明白哪里错了,怎么修改?


...全文
290 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
自由自在_Yu 2017-10-10
  • 打赏
  • 举报
回复
引用 6 楼 aiyou_ 的回复:
修改下边这个构造器: public Customer(String L,String F) { lastName = L; firstName =F; accounts = new Account[2]; //这句话添上就没问题了 } 原因简单地解释一下,因为你的Customer定义了两个构造器,上边这个是接受两个参数,另一个是默认的无参构造器,如下: public Customer() { accounts = new Account[2]; } 数组accounts的初始化放在了默认构造器中,但是你的main方法的代码只会调用接受两个参数的构造器。所以accounts并没有被初始化。
踏实低调 2017-10-10
  • 打赏
  • 举报
回复
修改下边这个构造器: public Customer(String L,String F) { lastName = L; firstName =F; accounts = new Account[2]; //这句话添上就没问题了 } 原因简单地解释一下,因为你的Customer定义了两个构造器,上边这个是接受两个参数,另一个是默认的无参构造器,如下: public Customer() { accounts = new Account[2]; } 数组accounts的初始化放在了默认构造器中,但是你的main方法的代码只会调用接受两个参数的构造器。所以accounts并没有被初始化。
码农高射炮 2017-10-09
  • 打赏
  • 举报
回复
代码里有个地方有问题,Bank类定义的时候使用customer[]来保存客户信息,但是在addCustomer(String f,String l)中 你新定义了一个临时变量coustomer[]来保存添加的客户信息,最终在测试的时候你去取customer中信息,肯定是空的,也就是你添加的客户信息并没有保存在customer中,只是添加在一个临时变量cousomer里了,肯定访问不到。 把这段public void addCustomer(String f,String l) { Customer coustomer[]=new Customer[5]; coustomer[numberOfCustomers]=new Customer(f,l); numberOfCustomers++; }改为 public void addCustomer(String f,String l) { // Customer coustomer[]=new Customer[5]; customer[numberOfCustomers]=new Customer(f,l); numberOfCustomers++; }再试一下效果。
无伤 2017-10-09
  • 打赏
  • 举报
回复
accounts 没有初始化,建议使用list代替数组。
李德胜1995 2017-10-08
  • 打赏
  • 举报
回复
很明显accounts为null嘛。。。。
ssc85 2017-10-08
  • 打赏
  • 举报
回复
那请问该如何修改啊,我还是个小萌新、、
喵学长 2017-10-08
  • 打赏
  • 举报
回复
空指针异常你查看异常处的对象,很快就能发现问题

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧