您好我正在尝试将我的Class的对象添加到具有对象属性的ArrayList中,但我一直在获取空指针 我正在从txt文件中读取值,将它们分配给属性,然后将对象放入数组列表
这是我的代码
public class Users {
Scanner scan;
BufferedReader reader;
MainGui gui;
Login login;
String name;
String surname;
String dob;
String address;
String town;
String number;
String position;
ArrayList<Users> allUsers = new ArrayList<Users>();
public Users(Login login){
this.login = login;
open();
}
public void open(){
try {
URL path = Users.class.getResource("records.txt");
File f = new File(path.getFile());
reader = new BufferedReader(new FileReader(f));
scan = new Scanner(reader);
} catch (FileNotFoundException e) {
System.out.println("File not found");
}
}
public void readRecords(){
open();
while(scan.hasNext()){
Users user = new Users(login);
user.name = scan.next();
user.surname = scan.next();
user.dob = scan.next();
user.address = scan.next();
user.address = addSpace(user.address);
user.town = scan.next();
user.number = scan.next();
user.position = scan.next();
allUsers.add(user);
}
scan.close();
}
public void printUsers(){
readRecords();
for(Users user : allUsers){
System.out.println("" + user );
}
}
}
我已经包含了参与其中的所有方法,以便您更好地帮助我。
答案 0 :(得分:1)
更改此部分代码,您需要在要创建的用户对象中设置值。
Users user = new Users(login);
user.name = scan.next();
..
allUsers.add(user);
最好为属性创建getter
和setters
。
并且您不需要在构造函数中将值设置为null,java会为您执行此操作。
答案 1 :(得分:0)
您在执行该方法的实例中设置属性,但是您要将新(空)对象添加到数组列表中。因此,列表中充满了空Users
个实例。
答案 2 :(得分:0)
这段代码有点乱 - 它在一个类中做了太多的东西。您有一个名为Users的类,它有一个Users列表和一个用户的属性。列表中的每个用户也将拥有一个用户列表。
好像你应该有两个类,一个名为Users,一个名为User(或类似命名的类)
Users类具有s列表,负责填充该列表(通过读入文件)。然后,User类只保留特定用户的信息,以及与单个用户相关的任何操作。
然后,当您读入记录时,您可以获取扫描仪(正如您目前所做的那样),将其传递给用户,然后该特定用户对象将填充其自己的字段(类似于awesome所说的)
答案 3 :(得分:0)
首先我建议你把&#34; System.out.print&#34;在read函数中创建USERS实例时的语句,以检查是否正在从文件中正确读取这些值。其次,在Users类中覆盖toString()以显示值,即
public String toString() {
System.out.println("Name: "+name+", surname: "+surname+", DOB: "+dob+", Address: "+address+", Town: "+town+", Number: "+number+", and Position: "+position);
}
现在你的System.out.println("" + user );
应该显示从文件中读取的值。