2012-10-25 70 views
0

我有以下代码;然而,似乎我正在访问不存在的数组列表中的索引...这里是代码。任何帮助赞赏。我为什么会得到nullPointerException

import java.util.*; 

public class Main { 


    public static void main(String[] args) { 

     ArrayList<BankAccount> allAccounts = new ArrayList<BankAccount>(); 

     Customer john = new Customer(); 
     john.firstName = "John"; 
     john.lastName = "Doe"; 

     BankAccount johnBa = new BankAccount(); 
     johnBa.accNumber = "111-222-333"; 
     johnBa.balance = 200; 
     johnBa.myCustomer = john; 

     Customer nick = new Customer(); 
     nick.firstName = "Nick"; 
     nick.lastName = "James"; 

     BankAccount nickBa = new BankAccount(); 
     nickBa.accNumber = "222-333-444"; 
     nickBa.balance = 100; 

     allAccounts.add(johnBa); 
     allAccounts.add(nickBa); 

     ArrayList<Customer> allCust = new ArrayList<Customer>(); 
     allCust = extractCustomers(allAccounts); 

     for(Customer c : allCust) { 
      System.out.println(c.firstName+" "+c.lastName); 
     }  


    } 

    static ArrayList<Customer> extractCustomers(ArrayList<BankAccount> ba) { 
     ArrayList<Customer> cu = new ArrayList<Customer>(); 

     for(BankAccount b: ba) { 
      cu.add(b.myCustomer); 
     } 

     return cu; 
    } 

} 


public class BankAccount { 

    String accNumber; 
    double balance; 

    Customer myCustomer; 

} 

public class Customer { 

    String firstName; 
    String lastName; 

} 
+2

*您在哪里得到'NullPointerException'? – climbage

+0

错误发生在哪里? – PaulG

+0

FullStackTrace会很有帮助,如果你可以发布。 –

回答

4
BankAccount nickBa = new BankAccount(); 
     nickBa.accNumber = "222-333-444"; 
     nickBa.balance = 100; 

没有客户在这里分配给第二BankAccount

但是,您正在尝试打印客户详细信息。对于第二个BankAccount c将是nullnull上的任何操作参考结果NullPointerException

for(Customer c : allCust) { 
      System.out.println(c.firstName+" "+c.lastName); 
     } 

确保c不是null基于C拨打任何电话,以避免NullPointerException之前。

for(Customer c : allCust) { 
      if(c != null){ 
      System.out.println(c.firstName+" "+c.lastName); 
       } 
     } 
+0

@BlueBullet:花了一段时间去浏览代码,并不那么容易。 – kosa

+0

@Nambari。你有牛眼;) –

+0

@RohitJain:谢谢! – kosa

0

您需要在BankAccount类中初始化您的Customer obj,如下所示。

Customer myCustomer = new Customer(); 

另外,它不建议像你在做的那样访问类变量。通过调用getCustomer()创建获取和设置方法并访问您的Customer obj

相关问题