复制并将数组复制到更大的数组,然后返回到原始大小的数组

时间:2014-07-14 00:41:31

标签: java arrays copy

嗨,对于我的程序,我试图通过创建另一个数组来复制数组,然后将这些值返回到原始数组,从而使数组更大。

import java.util.Scanner;
import java.util.Arrays;

public class Bank {

    public static void main(String[] args) {

        Scanner command = new Scanner(System.in);

        BankAccount [] arrayAcc = new BankAccount[1];
        BankAccount [] arrayAcc1 = new BankAccount[arrayAcc.length + 1];

        for(int z = 0; z < arrayAcc.length; z++){
            arrayAcc[z] = arrayAcc1[z];
        }
        arrayAcc = arrayAcc1;

        System.out.println("Enter new account number: ");
        int accNum = command.nextInt();
        arrayAcc[count++].setAccountID(accNum);
    }
}

当我后来尝试从这个数组中获取一个对象时,它给了我一个错误:

Exception in thread "main" java.lang.NullPointerException
at Bank.main(Bank.java:47)

2 个答案:

答案 0 :(得分:2)

您可以将项目从arrayAcc1复制到arrayAcc,而应该相反。

应该是:

arrayAcc1[z] = arrayAcc[z]; 

顺便说一句,为什么不使用List<BankAccount> accs = new ArrayList<BankAccounts>()

答案 1 :(得分:0)

您不需要for循环,因为Arrays.copyOf已经为您完成了工作。您也不需要强制转换,因为该方法返回与其参数类型相同的数组。

当您尝试访问未分配值的数组索引时,将引发NullPointerException。您还没有使用任何BankAccount对象填充数组,因此当您执行arrayAcc[count++].setAccountID(accNum);时,没有BankAccount来设置帐户ID。要向列表中添加帐户,请在调整数组大小后调用构造函数,并将对象添加到最后一个索引。代码应该类似于:

BankAccount []arrayAcc1 = Arrays.copyOf(arrayAcc, arrayAcc.length + 1);
arrayAcc = arrayAcc1;
arrayAcc[arrayAcc.length - 1] = new BankAccount(/*arguments here*/);