gpt4 book ai didi

java - 将文本文件中的数据输入动态数组对象时出现 NullPointerException

转载 作者:行者123 更新时间:2023-12-02 06:36:05 26 4
gpt4 key购买 nike

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

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

public static void getStudentNumbers(){

int a = 0;
while(fileReader.hasNext()){

if (a >= students.length) {
int newSize = 1 + students.length;
Student[] newData = new Student[newSize];
System.arraycopy(students, 0, newData, 0, students.length);
students = newData;
}
students[a].setStudentNumber(fileReader.nextLine()); //Error occurs here
a++;
}
}

学生对象:

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)

提前致谢!

最佳答案

您分配的元素仍然是 null

if (a >= students.length) {
int newSize = 1 + students.length;
Student[] newData = new Student[newSize];
System.arraycopy(students, 0, newData, 0, students.length);
students = newData;
// students[a] == null
}

您应该分配一个新的 Student对于数组中的每个元素,就个人而言,最简单的方法是在使用它之前进行分配,例如...

students[a] = new Student();
students[a].setStudentNumber(fileReader.nextLine());

我只是想指出,数组复制过程并不快,每次简单地分配一个新元素可能不是特别有效。

如果你不能使用像 List 这样的东西实现时,每次需要更多空间时,最好分配额外的空间(5-10个新元素),这将有助于减少分配次数并有助于提高效率。

关于java - 将文本文件中的数据输入动态数组对象时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19625274/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com