获取以下错误:“。”主题“main”java.lang.NullPointerException中的.Exception “
// Creates 10 accounts
Account[] AccArray = new Account[10];
// Data fields
double atmVal;
// Sets each account's discrete id and initial balance to 100
for (int i=0;i<10;i++){
AccArray[i].setId(i); // this line is specified in the error
AccArray[i].setBalance(100);
}
这个编译好了,但我得到了一个“例外”(不确定那些是什么)。
我根本没有看到什么是错的,至少在这里没有。如果认为是这种情况,我会添加更多代码。
答案 0 :(得分:1)
当你创建一个对象数组时,你得到的只是一个大小正确但充满null
s的数组。您需要通过说new Account()
并将其分配给数组来创建每个对象。你甚至可以在同一个循环中完成它。
答案 1 :(得分:1)
您的数组已初始化为包含10个帐户,但它们仍为空。将你的循环改为:
for (int i=0;i<10;i++){
ArrArray[i] = new Account(); // whatever constructor parameters are needed
AccArray[i].setId(i); // this line is specified in the error
AccArray[i].setBalance(100);
}
话虽如此,我建议您使用小写名称命名变量(例如accArray
)。
答案 2 :(得分:1)
你需要实例化一个Account
,假设你有一个空的构造函数Account
你会使用这样的东西 -
for (int i=0;i<10;i++) {
AccArray[i] = new Account(); // <-- like so.
AccArray[i].setId(i); // this line is specified in the error
AccArray[i].setBalance(100);
}
此外,您应该尝试遵循Java命名约定......所以可能更像是,
Account[] accounts = new Account[10];
for (int i=0;i<10;i++) {
accounts[i] = new Account(); // <-- like so.
accounts[i].setId(i); // this line is specified in the error
accounts[i].setBalance(100);
}
答案 3 :(得分:0)
正如其他人所指出的那样,创建Account
的新数组并不会实际创建任何Accounts
;你必须自己用new
来做。 Java 8为您提供了一种很好的方法:
Account[] accounts = new Account[10];
Arrays.setAll(accounts, i -> new Account());
setAll
的第二个参数是一个lambda表达式,它接受一个整数参数i
(正在设置的元素的索引)并将数组元素设置为new Account()
。表达式实际上并不使用索引,但如果需要,可以使用使用i
的表达式(或块)。