Java 从文本文件向动态数组中输入数据时出现NullPointerException

Java 从文本文件向动态数组中输入数据时出现NullPointerException,java,arrays,object,nullpointerexception,java.util.scanner,Java,Arrays,Object,Nullpointerexception,Java.util.scanner,我正在制作一个投票系统,用户用自己的学生号登录并进行选择。一旦有人投票,他们就无法再次登录。我做了一个物体;学生,包含学生编号的字符串和该学生编号是否已投票的布尔值(两者都是私有的)。我制作了一个这种类型的动态数组,以接受通过扫描仪读取的文本文件中给定数量的学生。但是,当我尝试在对象数组中填充student number字符串时,会得到一个NullPointerException。扫描仪正在从文本文件中读取信息,但当我尝试将信息放入Student对象的私有字符串时,会发生错误。当我使用字符串数组

我正在制作一个投票系统,用户用自己的学生号登录并进行选择。一旦有人投票,他们就无法再次登录。我做了一个物体;学生,包含学生编号的字符串和该学生编号是否已投票的布尔值(两者都是私有的)。我制作了一个这种类型的动态数组,以接受通过扫描仪读取的文本文件中给定数量的学生。但是,当我尝试在对象数组中填充student number字符串时,会得到一个NullPointerException。扫描仪正在从文本文件中读取信息,但当我尝试将信息放入Student对象的私有字符串时,会发生错误。当我使用字符串数组时,一切正常,但我没有布尔值来判断是否有人已经投票。我对编程很陌生,不知道问题出在哪里。有人能解释一下什么地方出了问题以及如何解决吗

方法,其中读取文本文件并填充数组(学生被全局声明和构造,最初大小为0):

学生对象:

public class Student{
  private Boolean hasVoted = false;
  private String studentNumber = "";

  public void setVotedStatus(Boolean voted){
    hasVoted = voted;
  }

  public void setStudentNumber(String studentNum){
    studentNumber = studentNum; 
  }

  public Boolean getVotedStatus(){
    return hasVoted;
  }

  public String getStudentNumber(){
    return studentNumber;
  } 
}
错误:

java.lang.NullPointerException
 at VotingSystem2_0.getStudentNumbers(VotingSystem2_0.java:279)
 at VotingSystem2_0.main(VotingSystem2_0.java:245)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
 at java.lang.reflect.Method.invoke(Unknown Source)
 at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272) 

提前谢谢

您忘记初始化新的
Student
变量:

    students = newData;       
}
students[a] = new Student(); // not sure what your ctor is.. 
students[a].setStudentNumber(fileReader.nextLine()); //Error occurs here
a++;
顺便问一句,学生证里除了数字以外还有别的东西吗?作为
字符串
有意义吗?
long
更有意义吗?:)只是想一想


哦,如果这样做了,要使代码正常工作,请使用将
字符串
转换为

您忘记初始化新的
Student
变量:

    students = newData;       
}
students[a] = new Student(); // not sure what your ctor is.. 
students[a].setStudentNumber(fileReader.nextLine()); //Error occurs here
a++;
顺便问一句,学生证里除了数字以外还有别的东西吗?作为
字符串
有意义吗?
long
更有意义吗?:)只是想一想

哦,如果这样做了,要使代码正常工作,请使用将
字符串
转换为

更换

students[a].setStudentNumber(fileReader.nextLine());

替换

students[a].setStudentNumber(fileReader.nextLine());


学生
初始化是否正确?你能把你在代码中初始化的代码放在代码>学生< /COD>?<代码>学生[A] < /COD>必须是NULL。你可能还想考虑使用<代码> ARARYLISTAB/COD>,而不是使用<代码>学生[]/COD>。
add(…)
方法将方便您进行讨厌的数组复制和扩展,并且它将运行得更快(您当前的算法是O(N^2),而不是O(N))。学生是全局初始化和构造的,很抱歉,这里忘了提一下:static Student[]Student=new Student[0];
学生
初始化是否正确?你能把你在代码中初始化的代码放在代码>学生< /COD>?<代码>学生[A] < /COD>必须是NULL。你可能还想考虑使用<代码> ARARYLISTAB/COD>,而不是使用<代码>学生[]/COD>。
add(…)
方法将方便您进行讨厌的数组复制和扩展,并且它将运行得更快(您当前的算法是O(N^2),而不是O(N))。学生是全局初始化和构造的,很抱歉,这里忘了提一下:static Student[]Student=new Student[0];抱歉,忘了提到我全局初始化了它,并将其大小设置为0@user您已初始化数组,但未初始化其元素。您所说的“我的元素未被初始化”是什么意思?当您将数组的大小初始化为零时,您从未将元素设置为任何东西,因为没有任何元素。您必须始终创建新元素以放入数组中。通过调整数组的大小,您不需要创建元素,只需要为元素分配空间(从技术上讲是指针,但现在忽略这一点)。因此,您需要为每个元素创建一个
new
对象,即
new Student()
——否则它们都是空的。对不起,忘了提到我全局初始化了它,并将其大小设置为0@user你已经初始化了数组,但不是它的元素。你说我的元素没有被初始化是什么意思?当你将数组初始化为零大小时,你从不将元素设置为任何东西,因为没有。您必须始终创建新元素以放入数组中。通过调整数组的大小,您不需要创建元素,只需要为元素分配空间(从技术上讲是指针,但现在忽略这一点)。因此,您需要为每个元素创建一个
new
对象,即
newstudent()
——否则它们都为空。