Java:解析列表并在数组中设置它时获取NullPointerException
这是我的Java程序,我在其中使用for循环设置对象,如图所示Java:解析列表并在数组中设置它时获取NullPointerException,java,Java,这是我的Java程序,我在其中使用for循环设置对象,如图所示 ArrayList list = new ArrayList(); for(int j = 0;j<=4;j++) { Student student = new Student(); studunt.name="Ravi"; list.add(student); } 我在这行得到一个NullPointerException 回答学生[in]=数据 请帮忙,谢谢 初始化! 像 可能是 或 您需要先初始化数组,然后才能使用它。
ArrayList list = new ArrayList();
for(int j = 0;j<=4;j++)
{
Student student = new Student();
studunt.name="Ravi";
list.add(student);
}
我在这行得到一个NullPointerException
回答学生[in]=数据
请帮忙,谢谢 初始化!
像
可能是
或
您需要先初始化数组,然后才能使用它。大概是这样的:
StudentResponse response = new StudentResponse();
response.student = new Student[list.size()];
for (int in = 0; in < list.size(); in++) {
{
Student data = (TopListsQuoteData) list.get(in);
response. student[in] = data;
}
我还建议使用列表的迭代器,而不是通过索引访问项目。这是可行的,但我觉得它不太干净,效率肯定也不高。您是否在StudentResponse的构造函数中初始化数组?差不多
public StudentResponse(int numberOfStudents) {
this.student = new Student[numberOfStudents];
}
您可能希望切换出student数组,因为另一种列表通常更易于使用
public class StudentResponse {
private List<Student> students;
public StudentResponse() {
this.students = new ArrayList<Student>();
}
public void addStudent(Student student) {
this.students.add(student);
}
public List<Student> getStudents() {
return this.students;
}
}
现在,您可以这样修改代码:
StudentResponse response = new StudentResponse();
for (int in = 0; in < list.size(); in++) {
{
Student data = (TopListsQuoteData) list.get(in);
response.addStudent(data);
}
你的代码有拼写错误
Student student = new Student();
studunt.name="Ravi";
但我认为你想要:
Student student = new Student();
student.name="Ravi";
如果您只需要列表的副本,但作为数组:
response.student = list.toArray(new Student[list.size()]);
你的公立学生怎么样;变量初始化?如果您发布的代码至少是可编译的,那么它也很有用。声明一个名为student的变量,然后使用另一个名为studunt的变量。您所拥有的和我们所看到的之间可能还有什么其他差异?您仍然需要维护一个索引来处理生成的student[]数组,因此在这种情况下使用foreach可能没有那么干净-而且,您声称,通常通过,List.get是O1。它仍将包含null。奥利维尔·罗杰(Olivier Roger)的评论是关键。好吧,就你所看到的代码而言,这是一个操作响应。学生[in]=数据;正在引发异常。除非在其他地方显式设置response.student null,否则此代码将正常工作。显然,数组将包含null,因此,如果您提取未设置为任何值的元素,将看到null。但是,只要不越过数组的边界,插入就可以了。我想这就是重点。
StudentResponse response = new StudentResponse();
for (int in = 0; in < list.size(); in++) {
{
Student data = (TopListsQuoteData) list.get(in);
response.addStudent(data);
}
Student student = new Student();
studunt.name="Ravi";
Student student = new Student();
student.name="Ravi";
response.student = list.toArray(new Student[list.size()]);