有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java向数组列表添加对象

您好,我正在尝试将我的类的对象添加到带有objects属性的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 );
   }
   }
 }

为了让你更好地帮助我,我已经包括了所有参与其中的方法


共 (4) 个答案

  1. # 1 楼答案

    更改这部分代码时,需要在正在创建的用户对象中设置值

    Users user = new Users(login);
    user.name = scan.next();
    ..
    allUsers.add(user);
    

    最好为属性创建gettersetters

    您不需要在构造函数中将值设置为null,java会为您这样做

  2. # 2 楼答案

    首先,我建议您在read函数中创建USERS实例时输入“System.out.print”语句,以检查您是否正确地从文件中读取了这些值。其次,重写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 ); 应该显示从文件中读取的值

  3. # 3 楼答案

    这段代码有点乱——它在一个类中做了太多的事情。您有一个名为Users的类,它有一个用户列表和一个用户的属性。列表中的每个用户也将有一个用户列表

    看起来你应该有两个类,一个叫做用户,另一个叫做用户(或类似命名的类)

    Users类拥有s的列表,并负责填充该列表(通过读取文件)。然后,User类只保留特定用户的信息,以及与单个用户有关的任何操作

    然后,当你读取记录时,你可以得到扫描器(就像你目前正在做的那样),将其传递给用户,然后特定的用户对象将填充它自己的字段(类似于awesome所说的)

  4. # 4 楼答案

    您在执行该方法的实例中设置属性,但将新(空)对象添加到数组列表中。因此,列表中充满了空的Users实例