我已经宣布了一个名为Member的类。然后我分配了一个成员类型的数组。当我尝试将东西放入数组时,它给了我这个错误:
Exception in thread "main" java.lang.NullPointerException
at HW2_2.main(HW2_2.java:15)
这是我的代码:
import c.Member;
import java.util.Scanner;
public class HW2_2
{
public static void main(String []args)
{
Member[] p = new Member[100];
Scanner in = new Scanner(System.in);
p[0].setID("apple12");
p[0].setPassword("1234");
p[0].setFirstname("fname");
p[0].setLastname("lname");
p[0].setEmail("*@gmail.com");
}
}
如何解决此问题,以便将数据存储到数组中?
答案 0 :(得分:2)
您已创建一个对象p
,该对象指向Member
个对象的数组。太棒了。但是,数组中的每个对象默认为null
。你不能简单地对它们进行操作。
您可能想要做类似......
的事情//...
p[0] = new Member(...);
p[0].setId("ID");
//... And so on
从这里学到的重要一点是,数组声明语法不会初始化数组本身的值。那是不可能的,对吧?你如何将参数分别传递给每个构造函数?你必须手动完成。
答案 1 :(得分:0)
当你:
Member[] p = new Member[100];
它将所有数组成员初始化为null(因为这是一个对象类型数组)。
如果您希望成员可以使用,则需要初始化成员,因此您必须:
p[0] = new Member();
然后才能使用该成员。
如果要一次初始化所有成员,则需要遍历数组中的所有元素并为每个成员创建一个元素;使用Java 8,可以这样做:
IntStream.range(0, p.length).forEach(index -> p[index] = new Member());
奇怪的是,<T> void fill(T[] array, Supplier<T> supplier)
类中没有Arrays
这样的方法。