0

私は次のコードを持っています。ただし、存在しないarraylistのインデックスにアクセスしているようです...コードは次のとおりです。助けていただければ幸いです。

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;

}
4

2 に答える 2

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

ここで2番目に割り当てられた顧客はありませんBankAccount

しかし、あなたは顧客の詳細を印刷しようとしています。2番目のBankAccountcはですnullnull参照に対する操作はすべて。になりNullPointerExceptionます。

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

nullを避けるために、cを呼び出す前にcがないことを確認してくださいNullPointerException

  for(Customer c : allCust) {
           if(c != null){
            System.out.println(c.firstName+" "+c.lastName);
               }
        } 
于 2012-10-25T20:21:19.093 に答える
0

以下のように、BankAccountクラスのCustomerobjを初期化する必要があります。

Customer myCustomer = new Customer();

また、あなたがしているようにクラス変数にアクセスすることはお勧めできません。getCustomer()を呼び出して、getメソッドとsetメソッドを作成し、Customerobjにアクセスします。

于 2012-10-25T20:25:52.623 に答える