2012-10-25 3 views
0

다음 코드가 있습니다; 그러나, 나는 존재하지 않는 arraylist의 색인에 접근하고있는 것 같습니다 ... 여기 코드가 있습니다. 어떤 도움을 주셔서 감사합니다.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 여기이 부여되어 있지 않음 고객.

그러나 고객 정보를 인쇄하려고합니다. 두 번째 경우 c는 null입니다. null에 대한 연산은 NullPointerException입니다.

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

있는지 다 확인은 NullPointerException을 방지하기 위해 C에 어떤 통화를하기 전에하지 null입니다.

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

@BlueBullet : 잠깐 코드를 들여다 보니 쉽지는 않았어. – kosa

+0

@ 남바 리. 당신은 황소의 눈을 가지고있다;) –

+0

@RohitJain : 고마워! – kosa

0

다음과 같이 BankAccount 클래스의 고객 obj를 초기화해야합니다.

Customer myCustomer = new Customer(); 

또한 클래스 변수에 액세스하지 않는 것이 좋습니다. getCustomer()를 호출하여 get 및 set 메소드를 작성하고 고객 obj에 액세스하십시오.

관련 문제